gpt4 book ai didi

http - 如何模拟完整的浏览器对 HTML 文档的请求?

转载 作者:可可西里 更新时间:2023-11-01 16:34:37 27 4
gpt4 key购买 nike

目标

我想像浏览器那样模拟对 HTML 文档的请求。这意味着我不仅要下载主要的 HTML 文件,还要下载 CSS、JS、图像等链接内容。

现在我只想解析第一个 HTML 文档。 IE。我没有考虑解析 CSS(背景图像、网络字体)或 JavaScript (Ajax) 等产生的请求。

要实现这一点,我需要知道浏览器如何准确地处理网站。我还没有找到一个很好的引用。对此的任何帮助将不胜感激,并可能解决我的问题。

假设

由于我缺乏任何好的引用资料,我假设该过程(不考虑重定向、渲染等)是这样工作的:

  1. www.facebook.com
  2. 建立持久的 HTTP 连接
  3. 请求路径“/”并接收 HTML
  4. 当文档完全(?)收到时,它被解析并填充需要请求的 URL 列表(分为 head 和 body 对象?!)
  5. 第一个 URL 取自头列表,并检查是否与该主机建立了持久的 HTTP 连接
    • 如果没有,则建立,然后请求对象
    • 如果有,则将其添加到连接的“下载队列”
  6. 重复第 4 步,直到列表为空
  7. 然后对“正文列表”重复步骤 4-5

这是否更接近于浏览器的工作方式?

奖励问题: header 中 JavaScript 和 CSS 文件的顺序是否有所不同?

疑问

我使用 Chrome 开发者工具 (Chrome 18) 进行了一些测试来确认。我连接到 www.facebook.com 测量每个对象的加载时间。使用 Ctrl + R 重新加载时,结果如下所示:

Output in the Chrome-Developer-Network-Tab for a request to www.facebook.com

最让我困惑的是,即使来自同一主机 (static.ak.fbcdn.net),大多数请求都是并发的。我的浏览器禁用了流水线(这是默认设置)那么为什么请求似乎仍然同时发生?

最佳答案

浏览器确实使用多个连接,以加快下载速度(并行下载资源)。然而,它们限制了与同一主机的连接数量,这是存在内容分发网络的原因之一。

header 中 CSS 和脚本文件的顺序很重要,如 scripts block parallel downloading (除非脚本未延迟)。

此外,浏览器在接收 HTML 时会解析 HTML(同样是为了加快速度)- 如果您将脚本放在头部试图操作尚未加载的 DOM 元素,就会出现错误。

p>

但所有这些都是浏览器实现细节,可能对您的任务并不重要。最好 - 查看一些 headless 浏览器的源代码以了解发生了什么。

关于http - 如何模拟完整的浏览器对 HTML 文档的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com