您的位置:首页 > 理论基础 > 计算机网络

HTTP 传输内容的压缩

2016-05-10 17:05 357 查看

一、HTTP压缩和内容编码的区别

HTTP压缩,在HTTP协议中,其实是内容编码的一种。

在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。

所以我们说HTTP压缩,其实就是HTTP内容编码的一种。 所以大家不要把HTTP压缩和HTTP内容编码两个概念混淆了。

二、HTTP压缩

HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩html,javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。

首先,浏览器发送一个请求(request)给web服务器,支持一个压缩格式如(gzip),服务端会将原来的源码压缩之后,通过http响应(response)信息返回给web浏览器,浏览器接收之后,显示出来。

三、HTTP压缩的过程

1. 浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)

2. Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。

3. Web服务器通过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip. 然后把Response发送给浏览器。

4. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页。
如下图:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data = "abcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabc"
+ "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab"
+ "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab"
+ "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdabcd";

System.out.println("原始数据的大小为:" + data.getBytes().length);

ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream gout = new GZIPOutputStream(bout); // buffer
gout.write(data.getBytes());
gout.close();
// 得到压缩后的数据
byte g[] = bout.toByteArray();

// 浏览器一般支持gzip、deflate等压缩方式,其中gzip最广泛使用;
// 没有设置此句的话浏览器访问时会直接弹出保存.gz文件的对话框,设置后浏览器会解压缩并显示
response.setHeader("Content-Encoding", "gzip");

// 此可以不设,不管有没有启用压缩,浏览器始终会根据内容大小自动设置Content-Length header
response.setHeader("Content-Length", g.length + "");

response.getOutputStream().write(g);
System.out.println("压缩后数据的大小为:" + g.length);
}


View Code

运行后,浏览器访问时会显示原始数据;查看响应信息如下,会有Content-Encoding:gzip



服务端会打印如下信息:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: