HTTP 数据协商(内容协商)

在HTTP协议中,内容协商是这样一种机制,通过为同一URL指向的资源提供不同的展现形式,可以使用户代理选择与用户需求相适应的最佳匹配(例如: 文档使用的自然语言,图片的格式,或则内容编码形式)


内容协商的基本原则
一份特定的文件称为一项资源。当客户端获取资源的时候,会使用其对应的URL发送请求。服务器通过URL来选择它指向的资源的一种展现形式,然后将这个特定的展现形式返回给客户端。

实际上: 当一项资源被访问的时候,特定展现形式的选取是通过内容协商机制来决定的,并且客户端和服务端之间存在多种协商方式。

最佳展现形式
客户端设置特定的HTTP首部(又称服务端驱动型内容协商机制主动协商机制),这是进行内容协商的标准方式。


服务端驱动型内容协商机制

HTTP常见请求头和响应头如下:
这里写图片描述

Accept首部 ( 对应Response Headers中 Content-Type )
Accept首部列举了用户代理希望接收的媒体资源的MIME类型。其中不同的MIME类型之间用逗号分隔,同时每一种MIME类型会配有一个品质因数,该参数明确了不同MIME类型之间的相对优先级。
常见浏览器的Accept首部默认值:
这里写图片描述

Accept-Encoding首部( 对应Response Headers中 Content-Encoding )
Accept-Encoding首部明确说明了可以接受的内容编码形式(所支持的压缩算法)。该首部的值是一个Q因子清单(例如: br,gzip;q=0.8),用来提示不同编码类型值的优先级顺序。
将HTTP消息进行压缩是一种最重要的提升Web站点性能的方法,该方法会减少所要传输的数据量的大小,节省可用带宽。浏览器总是会发送该首部,服务器则应该配置为接受它,并采用一定的压缩方案。

Accept-Language首部( 对应Response Headers中 Content-Language )
Accept-Language首部用来提示用户期望获得的自然语言的优先顺序。该首部的值是一个Q因子清单 (例如: “de, en ; q=0.7”)。用户代理的图形界面上所采用的语言通常可以用来设置为默认值,但是大多数浏览器允许设置不同优先级的语言选项。

User-Agent首部

尽管使用该首部来进行内容选择是合理的,但是依赖这个首部来确定用户代理都支持哪些功能特性通常被认为是一个糟糕的做法。

User-Agent 首部而可以用来识别发送请求的浏览器。 该字符串中包含有用间隔的产品标记符及注释的清单。
产品标识符由产品名称,后面紧跟的’/’以及产品版本号后成,例如 Firefox/4.0.1

猜你喜欢

转载自blog.csdn.net/mangoyiy/article/details/80944116