为什么此脚本在“curl”中按预期工作,但在浏览器中却不行?

为什么此脚本在“curl”中按预期工作,但在浏览器中却不行?

我有一个脚本,当通过 HTTP 协议访问时,它会发送一些数据,暂停几秒钟,然后再发送一些数据,重复执行,直到发送完所有数据。

当我在 中访问它时curl,它的行为与预期一致,并逐个发送数据。但是,如果我尝试在浏览器中访问该页面,屏幕上不会显示任何内容,直到全部的几秒钟后,脚本已运行完毕。

您可以通过访问 URL 来(暂时)观察此行为

curl 'http://50.80.82.137:8000'

然后在浏览器中再次尝试该 URL,并注意脚本如何等待大约 7 秒钟才加载任何内容,即使它应该立即访问第一行。

这种行为的根源是什么?


它是用 NodeJS 编写的,并且我把它放在了 GitHub 上以供参考。不过,在这种情况下,我假设所涉及的语言无关紧要(这就是为什么我在超级用户代替堆栈溢出,并且任何在发送数据之前有“暂停”的脚本都会以类似的方式运行。

答案1

网络浏览器无法开始处理网页,直到全部的HTML 文档已完成下载。HTML 下载完成后即可进行解析和渲染,但在此之前不能进行。

Curl 不需要等待整个文档,因为它不会解析任何内容,它只是StdOut在到达后立即打印所有内容。

使用客户端工具(Javascript、CSS等)来影响客户端行为,而不是网络协议。

相关内容