我正在构建一个HTTP客户端(用于嵌入式设备),我想知道, 如果我收到HTTP 3xx响应,并且在位置标题中,我得到的主机名与我在请求中的主机名不同。我应该断开TCP连接并重新连接到新主机,或者我只需要发送带有新主机头的新请求并保持旧的TCP连接保持活动状态。 谢谢
答案 0 :(得分:0)
如果您正在重定向到其他地方,重复使用原始TCP连接是没有意义的。如果我的网络服务器只托管example.com
并且我将您重定向到elsewhere.net
,我的网络服务器可能不会回复elsewhere.net
的请求。
更糟糕的是,如果我的服务器将您重定向到http://bank.com
并且在向bank.com
发送请求时重复使用相同的TCP连接,这也可能会让您受到极大的中间人攻击。我的服务器可以使用Host: bank.com
恶意响应请求,这不是您想要发生的事情。
您不能假设原始连接可以重复使用,除非重定向是使用相同协议的同一主机。
持久HTTP连接对于客户端/服务器组合的数量有点棘手。您可以通过浪费时间关闭并重新建立每个连接来避免复杂性:
如果您正在实施HTTP / 1.0客户端,则Connection: keep-alive
不是您必须实施的内容。合规服务器应该在每次请求后关闭连接,如果您不协商您支持持久连接。
如果你正在实施HTTP / 1.1客户端并且不想保持连接,只需发送Connection: close
请求,HTTP / 1.1服务器应该关闭连接