浏览器向服务器发送静态网页的GET请求。服务器用HTTP正文中的HTML页面发回HTTP OK响应。通过查看Content-Length字段或查找终止块或其他一些其他分隔符,浏览器可以知道它是否已收到网页以及随后的所有嵌入对象(图像等)。在这种情况下,浏览器总是知道网页何时完全加载,并且它不会再看到网络流量,这是否正确?说网页浏览器总是知道网页何时完全加载是否正确?
现在,如果页面是动态的(让我们说Facebook或Gmail),您可能会收到通知或页面部分使用AJAX或JavaScript在后台运行更新,这里浏览器也应该知道页面何时加载。如果服务器正在向客户端推送一些更新,该怎么办?在这种情况下浏览器是否有可能知道它何时收到完整更新?
那么,有什么情况下浏览器不知道它何时完全接收到它从Web服务器请求的数据(静态或动态)或基于推送的更新服务器正在转发给它的数据?
你是对的内容长度字段不是强制性的。就像在HTTP/1.1中一样,你有分块编码(未定义数量的块,其中每个块包含一个长度字段,而最后一个块的长度为零)。但浏览器仍然可以知道网页何时完全加载并向用户显示“完成”消息。你知道浏览器无法做到的任何网页吗? – Bruce 2011-04-09 12:35:05
@布鲁斯:我不知道这样的页面。在动态的情况下,它会暂时知道它已经完成,并且在静态情况下,一旦数据流完成(即使不知道长度),它就会知道它。不过,我已经看到了这个问题的症状(即,浏览器似乎从未完全加载页面)。大多数情况下,当某些内容(广告,跟踪像素)包含在实际页面所在的其他服务器中时,会发生这种情况。 – 0xC0000022L 2011-04-09 12:42:27