HTTP 协议中的Content-Encoding
Accept-Encoding 和Content-Encoding是HTTP中用来对采用哪种编码格式传输正文进行协定的一对头部字段。
工作原理如下:
- 首先浏览器(也就是客户端)发送请求时,通过Accept-Encoding带上自己支持的内容编码格式列表;
- 服务端在接收到请求后,从中挑选出一种用来对响应信息进行编码,并通过Content-Encoding来说明服务端选定的编码信息
- 浏览器在拿到响应正文后,依据Content-Encoding进行解压。
- 服务端也可以返回未压缩的正文,但这种情况不允许返回Content-Encoding
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
// Multiple algorithms, weighted with the quality value syntax:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
gzip使用 Lempel-Ziv 编码( LZ77 )的压缩格式,带有32位 CRC 。
compress使用 Lempel-Ziv-Welch( LZW )算法的压缩格式。
deflate使用 zlib 结构的压缩格式,以及 deflate 压缩算法。
br使用 Brotli 算法的压缩格式。
identity指示身份功能(即不压缩,也不修改)。即使不存在,该值始终被认为是可以接受的。
*匹配尚未在标题中列出的任何内容编码。如果标题不存在,这是默认值。这并不意味着支持任何算法; 只是表示没有偏好。
;q=( q 值加权)任何值都按照称为权重的相对质量值的优先顺序排列。
Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
Content-Encoding: identity
Content-Encoding: br
// Multiple, in the order in which they were applied
Content-Encoding: gzip, identity
Content-Encoding: deflate, gzip
gzip一种使用 Lempel-Ziv 编码( LZ77 )和32位 CRC 的格式。这最初是 UNIX gzip 程序的格式。
x-gzip为了兼容性的目的,HTTP / 1.1 标准还建议支持该内容编码的服务器应该将其识别为别名。
compress使用 Lempel-Ziv-Welch( LZW )算法的格式。值名取自实施此算法的 UNIX 压缩程序。
与大多数 UNIX 发行版已经消失的压缩程序一样,目前几乎没有浏览器使用这种内容编码,部分原因是由于专利问题(已在2003年过期)。
deflate使用 deflate 压缩算法(在 RFC 1951中定义)使用 zlib 结构(在 RFC 1950中定义)。
identity指示身份功能(即不压缩,也不修改)。除非明确指定,否则此标记始终被视为可接受。
br使用 Brotli 算法的格式。
在http协议中对于压缩过的数据定义如下
发送头部
xxx: yyy
xxx: yyy
xxx: yyy
空行
某段数据压缩后的长度
这段数据
如:
HTTP/1.1 200 OK
Date: Sun, 21 Jul 2019 18:55:38 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Access-Control-Allow-Origin: *
Keep-Alive: timeout=5, max=50
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
19
�
分享到:
相关推荐
1. **接收HTTP请求**:当Web服务器接收到用户的HTTP请求时,它首先会检查该请求中的“Accept-Encoding”头部信息,判断客户端(浏览器)是否支持HTTP压缩。如果“Accept-Encoding”包含“gzip, deflate”,则表明...
如果实体长度和传输长度不相等(例如设置了Transfer-Encoding),那么不能设置Content-Length。 4. 通过服务器关闭连接可以确定消息的传输长度,这种情况主要对应于短连接,即非keep-alive模式。 5. HTTP/1.1必须...
Content-Encoding通常是对数据内容进行一些压缩编码操作,而Transfer-Encoding通常是对传输采用分块策略之类的。 Content-Length头的作用是指定待传输的内容的字节长度。如果想知道Transfer-Encoding和Content-...
无服务器内容编码一个无服务器... contentEncoding : minimumCompressionSize : 0 # Minimum body size required for compression in bytes minimumCompressionSize必须是大于或等于0的Integer。 如果未配置contentEnc
请求头用于提供客户端可以接受的数据类型、压缩方法、语言等信息,例如 Accept、Accept-Encoding、Accept-Language 等。响应头用于提供服务器的名称、认证方式、资源的新地址等信息,例如 Location、Server、...
4. 修改HTTP响应头,添加`Content-Encoding`头,指示出使用的压缩算法。 5. 将压缩后的数据写入响应流,发送到客户端。 `tk-filter` 包含源代码这一特点意味着用户可以深入理解其工作方式,根据自身项目的需求进行...
同样,服务器在响应中会通过`Content-Encoding`头部告知客户端数据已被压缩,以便客户端进行解压。 3. **易语言中的网络请求**: 易语言作为一款中文编程环境,提供了丰富的网络编程接口。要实现网页GZIP压缩检测...
该插件使用 , 或库通过压缩算法来压缩资产,通过等提供资源。 安装 npm install --save-dev brotli-webpack-plugin 用法 var BrotliPlugin = require ( 'brotli-webpack-plugin' ) ; module . exports = { ...
headers.Add("Content-Encoding", "gzip"); headers["Content-Type"] = contentType; } } }); ``` 可以使用文件扩展名来确定文件类型,例如使用 `FileExtensionContentTypeProvider` 来获取文件类型。 ```...
服务器根据请求中的信息,使用zlib模块来压缩响应内容,再通过Content-Encoding头部告知客户端实际使用了哪种压缩编码。 在Node.js中使用zlib模块,首先需要通过require函数引入模块: ```javascript const zlib =...
当服务器响应时,它可能会返回一个"Content-Encoding: gzip"头,表明响应已被GZIP压缩。此时,客户端需要解压数据,这可以通过CInternetStream或自定义的解压逻辑来完成。 **处理压缩数据** 在MFC中,可以使用zlib...
### TCP/IP-HTTP-Header-消息报头 在TCP/IP协议族中,HTTP(超文本传输协议)是一种应用层协议,用于从Web服务器传输超文本到本地浏览器的传输协议。HTTP报文由请求行、状态行、首部字段(Header)、空行以及可选的...
1. **查看HTTP响应头**:当客户端向服务器发出请求时,服务器会检查请求头中的`Accept-Encoding`字段,如果其中包含了`gzip`,则表示客户端支持接收GZIP压缩的数据。此时,服务器会返回一个带有`Content-Encoding: ...
然后在HTTP响应头中设置`Content-Encoding: gzip`,告知客户端响应内容已被压缩。 3. 客户端接收到带有`Content-Encoding: gzip`头的响应后,会自动解压内容并正常渲染页面。 对于IIS 6.0服务器启用Gzip压缩的步骤...
headers = {'Content-Type': 'application/json', 'Content-Encoding': 'gzip'} response = requests.post('http://your-web-service.com/api', data=compressed_data, headers=headers) ``` 3. **处理web服务的...
服务器在接收到请求后,如果支持相应的压缩算法,会使用该算法压缩响应内容,并在`Content-Encoding`头部声明所使用的压缩方式。 对于服务器端,开发者可以配置Web服务器或应用服务器以自动对出站内容进行压缩。...
服务器可以根据客户端发送的 `Accept-Encoding` 头部信息,决定使用 gzip 还是 deflate 压缩算法来响应请求。下面是一个简单的 Node.js HTTP 服务器示例,它根据客户端的接受编码来选择合适的压缩方式: ```...
header('Content-Encoding: gzip'); ob_start('ob_gzhandler'); // 此处是你的PHP代码,例如输出HTML内容 echo '<html><body>Hello, Gzip!</body></html>'; ob_end_flush(); ``` 这段代码首先设置HTTP头声明使用...
- **实现方式**: 服务器检测到客户端支持某种压缩算法后,可以在响应头中加入相应的`Content-Encoding`字段,并使用相应的压缩算法对数据进行压缩后再发送。 ##### 3.3 范围请求 - **支持情况**: 大多数现代Web...
为了判断网页是否被GZIP压缩,我们可以检查返回的HTTP响应头中的`Content-Encoding`字段,如果值为`gzip`,那就说明网页是被GZIP压缩的。但是,如果服务器不提供这个信息,或者我们无法直接获取HTTP响应头,可以使用...