Der*_*會功夫 4 tcp google-chrome http
为了好玩,我正在从头开始构建一个 Web 服务器,我注意到 Chrome 的一些奇怪行为。我从 Chrome 获取的 GET 请求请求/如下所示:
GET / HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Run Code Online (Sandbox Code Playgroud)
没什么特别的,但它也会向我的服务器发出另一个请求,但它不发送任何内容,这导致我的服务器永远等待传入的消息。
Safari 没有发现这种行为。我已将服务器设置为以 403 响应每个请求,但持久连接仍然存在。这种连接的目的是什么,我应该如何处理它?我是否遗漏了 HTTP 协议中的某些内容?
HTTP/1.1 浏览器倾向于打开多个 TCP 连接。如果您的服务器一次只能处理一个连接,您可能会陷入僵局。select当每个连接准备好请求时,您应该使用线程或非阻塞 IO ( ) 来处理它。
Chrome 可能正在打开一个额外的套接字,以便在第一个关闭时准备就绪,但我不确定。HTTP/1.1 没有办法取消请求/响应,只能关闭套接字,而且服务器也有可能Connection: close在完成响应后发送,因此浏览器正在为以后的请求做准备。
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |