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