内容摘录自觉着写的挺好 - http://liuviphui.blog.163.com/blog/static/20227308420141843933379/
下面有具体介绍,还有实例
Gzip是如何压缩的
简单来说, Gzip压缩是在一个文本文件中找出类似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来说非常适合, 因为HTML和CSS文件通常包含大量的重复的字符串,例如空格,标签。
压缩的好处
http压缩对纯文本可以压缩至原内容的40%, 从而节省了60%的数据传输。
Gzip的缺点
JPEG这类文件用gzip压缩的不够好。
内容编码类型
HTTP定义了一些标准的内容编码类型,并允许用扩展的形式添加更多的编码。
Content-Encoding header 就用这些标准化的代号来说明编码时使用的算法
Content-Encoding值
gzip 表明实体采用GNU zip编码
compress 表明实体采用Unix的文件压缩程序
deflate 表明实体是用zlib的格式压缩的
identity 表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况
gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。
HTTP压缩的过程
浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)
Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。
Web服务器通过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip.
然后把Response发送给浏览器。
浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页
HTTP内容编码和HTTP压缩的区别
HTTP压缩,在HTTP协议中,其实是内容编码的一种。
在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
所以我们说HTTP压缩,其实就是HTTP内容编码的一种。 所以大家不要把HTTP压缩和HTTP内容编码两个概念混淆了。
代码示例:
可以创建一个servelt
下面有具体介绍,还有实例
Gzip是如何压缩的
简单来说, Gzip压缩是在一个文本文件中找出类似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来说非常适合, 因为HTML和CSS文件通常包含大量的重复的字符串,例如空格,标签。
压缩的好处
http压缩对纯文本可以压缩至原内容的40%, 从而节省了60%的数据传输。
Gzip的缺点
JPEG这类文件用gzip压缩的不够好。
内容编码类型
HTTP定义了一些标准的内容编码类型,并允许用扩展的形式添加更多的编码。
Content-Encoding header 就用这些标准化的代号来说明编码时使用的算法
Content-Encoding值
gzip 表明实体采用GNU zip编码
compress 表明实体采用Unix的文件压缩程序
deflate 表明实体是用zlib的格式压缩的
identity 表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况
gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。
HTTP压缩的过程
浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)
Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。
Web服务器通过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip.
然后把Response发送给浏览器。
浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页
HTTP内容编码和HTTP压缩的区别
HTTP压缩,在HTTP协议中,其实是内容编码的一种。
在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
所以我们说HTTP压缩,其实就是HTTP内容编码的一种。 所以大家不要把HTTP压缩和HTTP内容编码两个概念混淆了。
代码示例:
可以创建一个servelt
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
System.out.println("================ servlet init 2 ===============================");
final String UTF8_CHARSET_ENCODE = "UTF-8";
boolean flag = false;
String str = "34543253245432gfdsgfdsg7654876548fdsasdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd";
byte[] bytes = null;
String clientEncode = req.getHeader("Accept-Encoding");
if(clientEncode.indexOf("gzip")>-1 && str!=null && str.length()>1000){
bytes = Gzip_Test.compress(str.getBytes(UTF8_CHARSET_ENCODE));
flag = true;
resp.setHeader("Content-Encoding", "gzip");
resp.setContentLength(bytes.length);
}
resp.setCharacterEncoding(UTF8_CHARSET_ENCODE);
resp.setContentType("text/html;charset=utf-8");
ServletOutputStream sos = resp.getOutputStream();
if(flag){
sos.write(bytes);
}else{
sos.write(str.getBytes(UTF8_CHARSET_ENCODE));
}
sos.flush();
sos.close();
}
工具处理类:
/**
* @Description:
* @param bytes
* @return byte[]
*/
public static byte[] compress(byte[] bytes) {
try {
ByteArrayInputStream bai = new ByteArrayInputStream(bytes);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
compress(bai, bos);//压缩
bos.flush();
bos.close();
bai.close();
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @Description: 把输入流中的数据读取到通过压缩流写入到输出六中
* @param bai
* @param bos
*/
private static void compress(InputStream bai,OutputStream bos){
try {
GZIPOutputStream gos = new GZIPOutputStream(bos);
byte[] bs = new byte[1024];
int read = 0;
while((read=bai.read(bs, 0, bs.length))!=-1){
gos.write(bs, 0, read);
}
gos.finish();
gos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
System.out.println("================ servlet init 2 ===============================");
final String UTF8_CHARSET_ENCODE = "UTF-8";
boolean flag = false;
String str = "34543253245432gfdsgfdsg7654876548fdsasdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd";
byte[] bytes = null;
String clientEncode = req.getHeader("Accept-Encoding");
if(clientEncode.indexOf("gzip")>-1 && str!=null && str.length()>1000){
bytes = Gzip_Test.compress(str.getBytes(UTF8_CHARSET_ENCODE));
flag = true;
resp.setHeader("Content-Encoding", "gzip");
resp.setContentLength(bytes.length);
}
resp.setCharacterEncoding(UTF8_CHARSET_ENCODE);
resp.setContentType("text/html;charset=utf-8");
ServletOutputStream sos = resp.getOutputStream();
if(flag){
sos.write(bytes);
}else{
sos.write(str.getBytes(UTF8_CHARSET_ENCODE));
}
sos.flush();
sos.close();
}
工具处理类:
/**
* @Description:
* @param bytes
* @return byte[]
*/
public static byte[] compress(byte[] bytes) {
try {
ByteArrayInputStream bai = new ByteArrayInputStream(bytes);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
compress(bai, bos);//压缩
bos.flush();
bos.close();
bai.close();
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @Description: 把输入流中的数据读取到通过压缩流写入到输出六中
* @param bai
* @param bos
*/
private static void compress(InputStream bai,OutputStream bos){
try {
GZIPOutputStream gos = new GZIPOutputStream(bos);
byte[] bs = new byte[1024];
int read = 0;
while((read=bai.read(bs, 0, bs.length))!=-1){
gos.write(bs, 0, read);
}
gos.finish();
gos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
相关推荐
### IIS上启用Gzip压缩(HTTP压缩):深入解析与实践 #### 摘要与前言 在当今高速发展的互联网环境中,网站响应速度成为用户体验的关键因素之一。启用Gzip压缩(HTTP压缩)能够显著减少网页在网络上的传输大小,进而...
然后在HTTP响应头中设置`Content-Encoding: gzip`,告知客户端响应内容已被压缩。 3. 客户端接收到带有`Content-Encoding: gzip`头的响应后,会自动解压内容并正常渲染页面。 对于IIS 6.0服务器启用Gzip压缩的步骤...
- 示例:`Content-Encoding: gzip` 4. **Server** - 服务器软件的名称和版本。 - 示例:`Server: Apache/2.4.18 (Ubuntu)` 5. **Date** - 服务器生成响应的日期和时间。 - 示例:`Date: Thu, 17 Sep 2020 16:...
5. Content-Encoding: 响应体的压缩格式,如gzip。 6. Content-Language: 响应内容的语言。 7. Content-Length: 响应实体的长度。 8. Content-Location: 提供了资源的替代URL。 9. Content-Type: 响应内容的MIME类型...
3. Accept-Encoding:客户端通过这个字段告知服务器它能处理哪些数据压缩格式,如gzip或compress。例如,`Accept-Encoding: compress, gzip`。 4. Accept-Language:指定客户端期望的响应语言,例如`Accept-...
(3),处理结果:文件响应头包含分段Content-Encoding: gzip代表返回的是压缩文件。 2,CDN加速约会外部文件 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,可以在...
3. Accept-Encoding:客户端告知服务器它支持的内容压缩编码类型,如gzip、compress。示例:Accept-Encoding: compress, gzip 4. Accept-Language:客户端可以接受的语言,如英语(en)或中文(zh)。示例:Accept-...
3. Accept-Encoding: 指定浏览器可以支持的 web 服务器返回内容压缩编码类型,例如 Accept-Encoding: compress, gzip。 4. Accept-Language: 指定浏览器可接受的语言,例如 Accept-Language: en,zh。 5. Accept-...
当服务器响应时,它可能会返回一个"Content-Encoding: gzip"头,表明响应已被GZIP压缩。此时,客户端需要解压数据,这可以通过CInternetStream或自定义的解压逻辑来完成。 **处理压缩数据** 在MFC中,可以使用zlib...
然后检查客户端是否支持`gzip`,如果支持,就添加`Content-Encoding: gzip`头信息。接着读取JS文件内容,使用PHP内置的`gzencode`函数进行压缩,并将压缩后的内容输出给浏览器。 请注意,虽然`Gzip`压缩可以显著...
3. Accept-Encoding:指定客户端可以解码的编码类型,如gzip、deflate等,用于数据压缩传输。 4. Accept-Language:指示客户端所期望的语言偏好,服务器据此返回相应语言的内容。 5. Authorization:当访问受保护...
header('Content-Encoding: gzip'); ob_start('ob_gzhandler'); // 此处是你的PHP代码,例如输出HTML内容 echo '<html><body>Hello, Gzip!</body></html>'; ob_end_flush(); ``` 这段代码首先设置HTTP头声明使用...
在给定的压缩包中,"gzip.e" 文件很可能是易语言的一个模块,用于实现gzip压缩和解压缩功能。gzip是一种广泛使用的数据压缩格式,主要应用于网络传输中,以减少数据传输量,提高传输效率。 在易语言中,模块是可...
然后,我们需要添加一个`Content-Encoding`响应头,告诉客户端数据是以哪种方式进行压缩的。对于GZip,我们添加“gzip”;对于Deflate,我们添加“deflate”。 以下是一个简单的示例代码片段,展示了如何使用这两个...
1. **查看HTTP响应头**:当客户端向服务器发出请求时,服务器会检查请求头中的`Accept-Encoding`字段,如果其中包含了`gzip`,则表示客户端支持接收GZIP压缩的数据。此时,服务器会返回一个带有`Content-Encoding: ...
服务器可以通过设置 "Content-Encoding: gzip" 来表明返回的内容是经过 Gzip 压缩的,而客户端可以通过 "Accept-Encoding: gzip" 表明它能接收 Gzip 压缩的数据。 **代码示例** 在 `gzip.php` 或 `example.php` ...
例如,在gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。 客户端可以通过以下规则来获取消息长度: 1. 如果响应码为1xx、204、304或者HEAD请求,则直接忽视消息实体内容。 2. ...
- **检测GZIP**:检查`Content-Encoding`响应头,如果值为`gzip`,说明服务器返回的数据是GZIP压缩的。 - **解压数据**:如果检测到GZIP压缩,使用易语言的解压函数(可能需要借助第三方库或API)对数据进行解压。...
为了判断网页是否被GZIP压缩,我们可以检查返回的HTTP响应头中的`Content-Encoding`字段,如果值为`gzip`,那就说明网页是被GZIP压缩的。但是,如果服务器不提供这个信息,或者我们无法直接获取HTTP响应头,可以使用...
2. **HTTP头部设置**:为了启用GZIP压缩,服务器需要在HTTP响应头中包含`Content-Encoding: gzip`字段,告知浏览器数据是经过GZIP压缩的。同时,浏览器在请求头中可以发送`Accept-Encoding: gzip`,表示支持接收GZIP...