11 HTTP body中常见字段
小结:
1、数据类型 表示实体数据的 内容 是什么,使用的是 MIME type,相关的头字段是 Accept
和 Content-Type
2、数据编码 表示实体数据的 压缩方式,相关的头字段是 Accept-Encoding
和 Content-Encoding
3、语言类型 表示实体数据的 自然语言,相关的头字段是 Accept-Language
和 Content-Language
4、字符集 表示实体数据的 编码方式,相关的头字段是 Accept-Charset
和 Content-Type
5、客户端需要在请求头里使用 Accept
等头字段与服务器进行 内容协商,要求服务器返回最合适的数据
6、Accept
等头字段可以用 ,
顺序列出多个可能的选项,还可以用 ;q=value
参数来精确 指定权重
数据类型与压缩
需求1:声明数据类型
MIME type - 标记 body
的数据类型,形式是 type/subtype
的字符串
-
text
:即文本格式的可读数据 例如text/html
超文本文档、text/plain
纯文本、text/css
样式表 等 -
image
:即图像文件 例如image/gif
、image/jpeg
、image/png
等 -
audio
/video
:音频和视频数据 例如audio/mpeg
、video/mp4
等 -
application
:数据格式不固定 例如application/json
,application/javascript
、application/pdf
、application/octet-stream
,即不透明的二进制数据等
需求2:压缩数据类型
HTTP 在传输时为了节约带宽,有时候还会压缩数据 Encoding type - 编码格式
gzip
:GNU zip 压缩格式,也是互联网上最流行的压缩格式deflate
:zlib 压缩格式,流行程度仅次于gzip
br
:一种专门为 HTTP 优化的新压缩算法(Brotli)
HTTP 协议为此定义了两个 Accept
请求头字段和两个 Content
实体头字段,用于客户端和服务器进行 内容协商:
- 客户端用
Accept
头告诉服务器希望接收什么样的数据 - 服务器用
Content
头告诉客户端实际发送了什么样的数据
-
Accept
- 标记 客户端可理解的 MIME typeAccept
字段标记的是客户端可理解的 MIME type,可以用,
做分隔符列出多个类型,让服务器有更多的选择余地Accept: text/html,application/xml,image/webp,image/png
-
Content
- 标记 服务器传输的真实类型服务器在响应报文里用头字段
Content-Type
告诉实体数据的真实类型Content-Type: text/html Content-Type: image/png
-
Accept-Encoding
- 标记的是 客户端支持的压缩格式如果请求报文里没有
Accept-Encoding
字段,就表示客户端 不支持压缩数据Accept-Encoding: gzip, deflate, br
-
Content-Encoding
- 标记 服务器实际使用的压缩格式 如果响应报文里没有Content-Encoding
字段,就表示响应数据 没有被压缩Content-Encoding: gzip
语言类型与字符集
需求1:语言类型- 国际化
使用 type-subtype
的形式
-
注意:该属性的格式与数据类型不同,分隔符不是
/
,而是-
,例如:en
表示任意的英语,en-US
表示美式英语,en-GB
表示英式英语,而zh-CN
就表示我们最常使用的汉语
需求2:字符集
英语世界用的 ASCII
汉语世界用的 GBK
、BIG5
日语世界用的 Shift_JIS
等
—> 后来就出现了 Unicode
和 UTF-8
,把世界上所有的语言都容纳在一种编码方案里
UTF-8 也成为了互联网上的标准字符集
Accept-Language
- 标记了 客户端可理解的自然语言,也允许用,
做分隔符列出多个类型,按照 顺序代表优先级,例如:Accept-Language: zh-CN, zh, en
Content-Language
- 服务端返回数据使用的 实际语言类型Content-Language: zh-CN
Accept-Charset
- 客户端可理解的字符集Accept-Charset: gbk, utf-8
但响应头里却没有对应的
Content-Charset
,而是在Content-Type
字段的数据类型后面用charset=xxx
来表示服务器实际使用的字符集
Content-Type: text/html; charset=utf-8
内容协商的质量值
Accept
、Accept-Encoding
、Accept-Language
等请求字段中,可以使用特殊的 q
参数表示 权重 来设定优先级:权重的最大值是 1,最小值是 0.01,默认值是 1,如果值是 0 就表示拒绝 —> 形如 ;q=0.8
。
【注意:在 HTTP
的内容协商里却恰好反了过来,;
的意义是小于 ,
的】
-
举个例子
下方代表了浏览器最希望使用的是
HTML
文件,权重是 1,其次是XML
文件,权重是 0.9,最后是任意数据类型,权重是 0.8。
Accept: text/html,application/xml;q=0.9,*/*;q=0.8