📅  最后修改于: 2021-01-03 03:12:27             🧑  作者: Mango
HTTP的大多数响应都包含一个实体,该实体包含供用户解释的信息。自然地,它用于为用户提供与请求相对应的最佳可用实体。不幸的是,对于高速缓存和服务器,并非所有用户都对最佳选择拥有相同的偏好。这就是HTTP为“内容协商”提供几种机制的原因。如果有多种表示形式,则为给定响应选择最佳表示形式的过程。
任何包含实体的响应都可以进行协商,包括错误响应。
在HTTP中,有两种类型的内容协商,服务器驱动的协商和代理驱动的协商。两种协商都是正交的,因此可以组合使用或单独使用。一种称为透明协商的组合方法,发生在原始服务器提供代理驱动的协商信息时,该方法由缓存使用,以为后续请求提供服务器驱动的协商。
当发生服务器驱动的协商时,将通过位于服务器上的算法为响应选择最佳表示形式。根据资源的可用表示形式,选择所基于的内容。选择还基于请求消息中特定标头字段的内容或其他伪装在请求中的信息(例如客户端的网络地址)。
当发生代理驱动的协商时,用户代理会在从源服务器收到初始响应后,为响应执行最佳表示形式的选择。在代理驱动的协商中,选择基于响应的可用表示形式列表,该列表包含在初始响应的标头字段或实体-主体中,每个表示形式均由其自己的URI标识。可以通过用户从生成的菜单中进行选择或自动执行从表示列表中进行选择。
当需要第二个请求以获得最佳替代表示形式时,代理驱动的协商会受到影响。
它是服务器驱动的协商和代理驱动的协商的结合。如果以响应的可用表示形式的列表形式提供高速缓存,并且高速缓存完全了解方差的维,则高速缓存将能够代表源服务器执行服务器驱动的协商。