18

HTTP标头中的Connection和之间有什么区别?Proxy-Connection

Proxy-Connection字段是由代理添加的吗?还是客户端和服务器?代理、客户端或服务器在接收到这两个字段分别为 keep-alive 和 close 的标头后会做什么?

4

2 回答 2

20

Connection头是 HTTP 1.0 和 1.1 规范(RFC 2068 和 RFC 2616)中定义的标准标头,用于维护 HTTP 连接上的保持活动行为。

Proxy-ConnectionConnection是 Netscape 开发人员创建的一个实验性标头,由于对何时可以使用标头的误解,它可以做类似的事情。它从未正常工作过,并且被当今存在的许多常见 HTTP 系统所忽略。当它按设计工作时,两者之间没有区别。

于 2013-05-31T02:12:31.093 回答
4

引自https://www.rfc-editor.org/rfc/rfc7230#appendix-A.1.2

在 HTTP/1.0 中,每个连接在请求之前由客户端建立,在发送响应后由服务器关闭。然而,一些实现实现了 [RFC2068] 第 19.7.1 节中描述的持久连接的显式协商(“保持活动”)版本。

一些客户端和服务器可能希望与这些以前的持久连接方法兼容,通过使用“Connection: keep-alive”请求头字段明确协商它们。但是,HTTP/1.0 长连接的一些实验性实现是错误的;例如,如果 HTTP/1.0 代理服务器不理解 Connection,它会错误地将该头字段转发到下一个入站服务器,这将导致连接挂起。

一种尝试的解决方案是引入专门针对代理的 Proxy-Connection 标头字段。在实践中,这也是行不通的,因为代理通常部署在多个层中,带来了上面讨论的相同问题。

因此,我们鼓励客户端不要在任何请求中发送 Proxy-Connection 标头字段。

还鼓励客户考虑使用 Connection: keep-alive 在请求中谨慎;虽然它们可以启用与 HTTP/1.0 服务器的持久连接,但使用它们的客户端将需要监视连接是否存在“挂起”请求(这表明客户端应该停止发送标头字段),并且客户端不应该使用这种机制所有在使用代理时。

于 2019-05-28T01:40:22.477 回答