繁体   English   中英

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

[英]Can an persistent HTTP client send more than one request at a time?

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

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

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

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

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

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

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

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

关于第一个问题:

客户端是否可能在服务器处理第一个HTTP请求之前发送另一个HTTP请求?

我相信是的,它是可能的(也许我错了,我记得几年前已经阅读过;最终的答案是在HTTP协议规范中)。 但我不明白你为什么这么问。 此外,客户端可以同时打开几个TCP连接到同一个HTTP服务器。 当然,你有许多同时发生的客户。

关于第二个问题

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

我相信情况通常如此,但我不认为这是肯定的。 我可以想象一些聪明的HTTP客户端,认识到具有不同Host:头的两个URL共享相同的IP,可以重用相同的连接。

但我不明白你为什么这么问。 已经发明了持久的HTTP连接以最小化TCP连接,这是非常昂贵的,并且您要问的两个问题是极端的。 也许很少有HTTP客户端正在执行您今天所描述的内容

你应该严格对待你发送的内容(符合标准的一致性),但要接受你接受的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM