📜  HTTP内容协商

📅  最后修改于: 2021-01-03 03:12:27             🧑  作者: Mango

HTTP内容协商

HTTP的大多数响应都包含一个实体,该实体包含供用户解释的信息。自然地,它用于为用户提供与请求相对应的最佳可用实体。不幸的是,对于高速缓存和服务器,并非所有用户都对最佳选择拥有相同的偏好。这就是HTTP为“内容协商”提供几种机制的原因。如果有多种表示形式,则为给定响应选择最佳表示形式的过程。

任何包含实体的响应都可以进行协商,包括错误响应。

在HTTP中,有两种类型的内容协商,服务器驱动的协商和代理驱动的协商。两种协商都是正交的,因此可以组合使用或单独使用。一种称为透明协商的组合方法,发生在原始服务器提供代理驱动的协商信息时,该方法由缓存使用,以为后续请求提供服务器驱动的协商。

服务器驱动的协商

当发生服务器驱动的协商时,将通过位于服务器上的算法为响应选择最佳表示形式。根据资源的可用表示形式,选择所基于的内容。选择还基于请求消息中特定标头字段的内容或其他伪装在请求中的信息(例如客户端的网络地址)。

优点

  • 当难以从可用表示中进行选择的算法难以描述给用户代理时,这很有用。
  • 当服务器希望将其“最佳猜测”与第一个响应一起发送给客户端时,此功能很有用。
  • 为了改善对服务器的猜测,用户代理可以包括描述其对于这种响应的偏好的请求头字段。

缺点

  • 对于服务器,无法准确确定对任何给定用户而言最佳的选择。因此,服务器需要完全了解用户代理的功能以及响应的预期用途。
  • 它使源服务器实现和用于生成对请求的响应的算法变得复杂。

代理驱动的协商

当发生代理驱动的协商时,用户代理会在从源服务器收到初始响应后,为响应执行最佳表示形式的选择。在代理驱动的协商中,选择基于响应的可用表示形式列表,该列表包含在初始响应的标头字段或实体-主体中,每个表示形式均由其自己的URI标识。可以通过用户从生成的菜单中进行选择或自动执行从表示列表中进行选择。

优点

  • 当源服务器无法通过检查请求来确定用户代理的功能时,如果响应将在常用尺寸上变化,则使用它。
  • 当公共缓存分配服务器负载并减少网络使用量时,将使用它。

缺点

当需要第二个请求以获得最佳替代表示形式时,代理驱动的协商会受到影响。

透明谈判

它是服务器驱动的协商和代理驱动的协商的结合。如果以响应的可用表示形式的列表形式提供高速缓存,并且高速缓存完全了解方差的维,则高速缓存将能够代表源服务器执行服务器驱动的协商。