HTTP
头部中的Connection
和Proxy-Connection
有什么区别?
Proxy-Connection
字段是由代理服务器添加的吗?还是客户端和服务器?如果接收到这两个字段值为keep-alive和close的报文头,那么代理服务器、客户端或服务器会怎样处理?
HTTP
头部中的Connection
和Proxy-Connection
有什么区别?
Proxy-Connection
字段是由代理服务器添加的吗?还是客户端和服务器?如果接收到这两个字段值为keep-alive和close的报文头,那么代理服务器、客户端或服务器会怎样处理?
Connection
头是HTTP 1.0和1.1规范(RFC 2068和RFC 2616)中定义的标准头,用于维护HTTP连接上的保持活动行为。
Proxy-Connection
是由Netscape开发人员创建的实验性头,旨在通过错误地理解Connection
头可以使用的时间来执行类似的操作。它从未正常工作,并被许多现有的常见HTTP系统忽略。当按设计方式工作时,两者之间没有区别。
Connection
头字段转发给 HTTP/1.1 的客户端或服务器。 - EricLaw引用自https://www.rfc-editor.org/rfc/rfc7230#appendix-A.1.2
在HTTP/1.0中,每个连接在请求之前由客户端建立,并在服务器发送响应后关闭。然而,一些实现实现了在[RFC2068]的第19.7.1节中描述的显式协商(“Keep-Alive”)版本的持久连接。
一些客户端和服务器可能希望与这些先前的持久连接方法兼容,通过使用“Connection:keep-alive”请求头字段来明确协商它们。但是,一些HTTP/1.0持久连接的实验性实现存在缺陷;例如,如果一个HTTP/1.0代理服务器不理解Connection,则会错误地转发该头字段到下一个入站服务器,这将导致连接挂起。
作为结果,鼓励客户在任何请求中不发送Proxy-Connection头字段。一种尝试的解决方案是引入一个专门针对代理的Proxy-Connection头字段。实际上,这也是行不通的,因为代理通常部署在多层中,带来了上述相同的问题。
http_proxy=myproxy.io:8080 curl -v ...
命令会实际上发送 > Proxy-Connection: Keep-Alive
,尽管这在客户端中是不被鼓励的。 - miku