HTTP请求响应的连接关闭

4
我有两个关于HTTP连接关闭的问题:
  1. 如果客户端发送一个带有Connection: close的HTTP请求到HTTP服务器,是HTTP服务器还是客户端在接收到响应后发送TCP FIN呢?

  2. 如果客户端发送的HTTP请求格式不正确,而服务器发送400 BAD REQUEST错误,是最好由服务器关闭连接(即使HTTP请求具有connection: keep-alive),还是保持连接仍然处于活动状态?

谢谢您预先回答我的问题!

你是否尝试使用Fiddler(或类似工具)对一个知名的服务器进行测试? - m.edmondson
1个回答

6
  1. 当服务器收到400 Bad Request时,它会带着keep-alive头信息发送响应,因为如果客户端想要发送另一个请求,它们可以使用预先存在的连接(这个连接在一定时间内被关闭,它有一个过期日期)。Keep-Alive头信息更多地是为了不让网络饱和,避免TCP连接需求。你基本上说“我将与你交流2分钟,无论你发送给我什么,我都将通过这个连接回答你”。

  2. 服务器只是一个接收来自用户命令的对象。你向他提出请求,他会执行或不执行。TCP FIN是你向服务器发送的一条消息,用于关闭连接,但你可以选择何时不再与他通信。客户端传输第一个FIN,并接收一个ACK以确保服务器已经收到。然后服务器启动自己的FIN,并等待ACK。如果一切正常,你和你的服务器就不再是朋友了。


感谢您详细的回复。因此,如果请求或响应具有标题“Connection: Close”,则客户端有责任向服务器发送TCP FIN以启动连接的关闭。无论是客户端在请求中发送此标头还是服务器在响应中发送此标头,都是如此。 我的理解正确吗? - Vamsi Mohan
请求和响应中都包含了“Connection: Close”头部,每当要求关闭连接时。你是对的! - devconnected
不,我使用tcpdump发现并不像你说的那样。我发现服务器总是发送FIN。 - ken
1
我不确定你是否回答了第一个问题? 如果:
  1. HTTP请求头中有“Connection: close”,谁将关闭连接(或启动连接的关闭)?
  2. HTTP响应头中有“Connection: close”,谁将关闭连接(或启动连接的关闭)?
- NPE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接