我理解HTTP / 1.1持久连接的价值:浏览器可以在一个连接中获取CSS / Javascript / Image文件等辅助资源。
我不明白的是HTTP协议如何指示何时应该关闭持久连接。是由客户端还是服务器来结束会话?
似乎客户端可以更好地了解会话何时“结束”,因为客户端可能正在解析主要的HTML资源,并且识别各种子资源(javascript / css / images等) 。)当客户端完成解析并识别出最后一个“子资源”时,它可以向服务器发送“连接:关闭”。但是,在实践中,使用Firefox HTTP Live-header插件表明事实上并没有发生这种情况。
那么HTTP / 1.1协议如何表明没有更多内容可以下载,会话应该终止?
答案 0 :(得分:0)
(强调我的)
持久连接提供了一种机制,通过该机制,客户端和服务器可以发出TCP连接关闭的信号。 此信令使用“连接标头”字段(部分14.10)进行。一旦发出关闭信号,客户端就不能再发送该连接上的请求。
当客户端或服务器希望超时时,应该在传输连接上发出正常关闭。客户和服务器应该经常关注运输关闭的另一侧,并在适当时对其进行响应。如果客户端或服务器没有及时检测到另一方的关闭,则可能导致网络上不必要的资源消耗。
请注意"应该"在RFC中与" MUST"不一样。 - 客户没有义务发送close
标题。继续第8.1.4节(强调我的):
这意味着客户端,服务器和代理必须能够从异步关闭事件中恢复。客户端软件应该重新打开传输连接并重新传输请求的中止序列,而无需用户交互,只要请求序列是幂等的(参见第9.1.2节)。非幂等方法或序列不得自动重试,尽管用户代理可以为人类操作员提供重试请求的选择。具有对应用程序的语义理解的用户代理软件的确认可以替代用户确认。如果第二个请求序列失败,则不应重复自动重试。
服务器只需在客户端的最后一个请求之后通过发送Connection: close
标头关闭预设超时后连接,而客户端只需处理它。