说网页浏览器总是知道网页何时完全加载是否正确?

时间:2011-04-09 12:22:21

标签: http browser

浏览器向服务器发送静态网页的GET请求。服务器使用HTTP正文中的HTML页面发回HTTP OK响应。查看Content-Length字段或查找终止块或某些其他编码的其他分隔符,浏览器可以知道它是否已经接收到网页以及随后的所有嵌入对象(图像等)。在这种情况下,浏览器总是知道网页何时完全加载并且不会再看到网络流量,这是否正确?

现在,如果页面是动态的(比如说facebook或gmail),你可能会收到通知或页面部分使用AJAX或后台运行的javascript进行更新,这里浏览器应该知道页面何时加载。如果服务器正在向客户端推送一些更新,该怎么办?在这种情况下,浏览器是否可以知道它何时收到完整更新?

那么,是否有任何情况下浏览器不知道它何时完全接收到它从Web服务器请求的数据(静态或动态)或服务器转发给它的基于推送的更新?

3 个答案:

答案 0 :(得分:1)

我只能想象(对于静态情况)没有设置Content-Length时的一个场景。发送服务器不是强制性的。

当然,潜在地,在包含脚本的页面中,还可以有其他场景,其中脚本逐个加载一点一点的延迟(包括您提到的AJAX场景)。这样浏览器也不会事先知道。在这种情况下,它会“暂时”知道页面已完全加载,但脚本中的下一个操作将再次使该断言无效。

答案 1 :(得分:0)

即使页面本身已加载,您也不需要AJAX来处理页面中所有元素都未加载的情况。一点点javascript就是你所需要的(自从我上次使用JS以来已经有一段时间了,可能会有一些语法错误)

  

< img id =“dyn_image”src =“/ not_clicked.gif”>

     

< input type =“button”onclick =“javascrit:document.get(”dyn_image“)。src =”/ clicked.gif“>

答案 2 :(得分:0)

有时服务器使用某种推送技术,例如Comets。在这种情况下,发送请求(通常是Ajax请求),而不接收任何响应(显然也没有HTTP头),但保持TCP连接打开。这可能需要很长时间,但仍可能被视为Ajax调用的子案例。

另一种情况是HTML5的WebSocket技术。在WebSocket中,服务器端可以从客户端将数据推送到客户端而无需显式请求

这两者可以合并,因此您的问题的答案是:是的,可能存在无法预测网络流量过高的情况。常见的(在所有情况下)是客户端必须将通道打开到服务器。