持久性HTTP客户端一次可以发送多个请求吗?

Yif*_*fan 7 sockets connection http

我正在编写HTTP代理服务器,我注意到许多客户端使用"Connection:Keep-Alive"标头来保持持久连接.客户端是否可能在服务器处理第一个HTTP请求之前发送另一个HTTP请求?

例如,客户端发送"GET/HTTP/1.1",但在服务器有机会响应之前,客户端发送"GET /favicon.ico HTTP/1.1".那可能吗?或者客户端会在发送第二个请求之前暂停响应吗?

此外,在使用持久连接时,是否可以安全地假设通过该连接的所有请求都具有相同的"Host:"标头?

pha*_*ers 6

是的,客户端可以管道化请求。(参见http://en.wikipedia.org/wiki/HTTP_pipelined)。

扭转你的最后一个问题......对于客户端来说,假设对多个主机的请求将由单个管道提供服务是不安全的。可能没有直接解决 Host: 标头上的问题的规范,但可以肯定它们是相同的。


Jul*_*hke 5

"另外,当使用持久连接时,假设通过该连接的所有请求都具有相同的"Host:"标题是否安全?"

我不这么认为,请参阅HTTPbis P1,第2.2节:

收件人必须孤立地考虑连接中的每条消息; 因为HTTP是无状态协议,所以不能假设同一连接上的两个请求来自同一客户端或共享任何其他公共属性.特别是,中介可能会将来自不同客户端的请求混合到一个服务器连接中.请注意,某些现有的HTTP扩展(例如,[RFC4559])违反了此要求,从而可能导致互操作性和安全性问题.