[转帖]如何判断网站请求是否响应完毕?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
:如何判断网站请求是否响应完毕? 某个网站,通过浏览器去访问则会一直在加载中,直到超时。为什么这个网站会一直加载(顶部状态栏转圈),但是页面展示正常?
浏览器不需要等待页面完全加载完才去渲染。 所谓的“页面加载”实质就是一个 HTTP 请求。HTTP 虽然是一个文本协议,但也是基于 Socket 流式传输的。既然是流式的,那服务端就完全可以先只发送一部分数据、但是却不关闭这个流,这样客户端会认为没有接收完而选择继续等待,直到超时。 当然了,这是对于 HTTP/1.1 之前(先忽略 Keep-Alive,它不是重点)。在 HTTP/2 有了多路复用之后,多个 HTTP 请求底下对应的可能是同一个 Socket,这样就不能单纯地把“Socket 关闭”和“响应接收完毕”划等号了 —— A 请求的响应接收完了、B 请求的响应可未必也完了,此时 Socket 并不会关闭。 幸好制订 HTTP 协议时早就考虑好了和底层协议脱钩的事情,它是有 那么反过来想,如果服务端返回了一个错误 你可以用 Wireshark 之类的抓包看一下(需要直接抓 TCP,而不是 DevTools/Fiddler/Charles 这种基于 HTTP 的,因为如上文所言,这个 HTTP 报文会被认为是“不完整的”,所以这些基于 HTTP 的抓包工具是不能正确解析的),观察一下这个请求的实际收到的字节数是不是小于 虽然未完整接收,但浏览器会先渲染接收到的那部分HTML。 比如我用 Fiddler 拦截了 www.baidu.com 的请求,把它的 Content-Type 改成了 999999,然后浏览器就会一直转圈、但是会先渲染收到的那部分 HTML : 该文章在 2023/8/29 10:37:07 编辑过 |
关键字查询
相关文章
正在查询... |