目标
我想以浏览器的方式模拟对 HTML 文档的请求。这意味着我不仅要下载主要的 HTML 文件,还要下载 CSS、JS、图像等链接的东西。
现在我只想解析第一个 HTML 文档。即,我没有考虑解析导致的请求,例如 CSS(背景图像、网络字体)或 JavaScript(Ajax)等。
要实现这一点,我需要知道浏览器如何准确处理网站。我还没有找到很好的参考。对此的任何帮助将不胜感激,并可能解决我的问题。
假设
由于我缺乏任何好的参考资料,我假设这个过程(不考虑重定向、渲染等)是这样工作的:
- 建立持久的 HTTP 连接
www.facebook.com
- 请求路径“/”并接收 HTML
- 当文档被完全(?)接收到时,它会被解析并填充需要请求的 URL 列表(分为头对象和正文对象?!)
- 第一个 URL 取自 head-list 并检查是否与该主机建立了持久的 HTTP 连接
- 如果没有,则建立,然后请求对象
- 如果有,则将其添加到连接的“下载队列”中
- 重复第 4 步,直到列表为空
- 然后对“正文列表”重复步骤 4-5
这甚至接近浏览器的工作方式吗?
额外问题:标头中 JavaScript 和 CSS 文件的顺序是否有所不同?
怀疑
我使用 Chrome 开发者工具 (Chrome 18) 进行了一些测试来确认。我连接到www.facebook.com
测量每个对象的加载时间。使用Ctrl+重新加载时R,结果如下所示:
最让我困惑的是,即使来自同一主机(static.ak.fbcdn.net
),大多数请求也与其他请求并发。我的浏览器禁用了流水线(这是默认设置),那么为什么请求似乎仍然同时发生?