LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[转帖]如何判断网站请求是否响应完毕?

freeflydom
2023年8月29日 10:37 本文热度 603

:如何判断网站请求是否响应完毕?

某个网站,通过浏览器去访问则会一直在加载中,直到超时。为什么这个网站会一直加载(顶部状态栏转圈),但是页面展示正常?


 



浏览器不需要等待页面完全加载完才去渲染。

所谓的“页面加载”实质就是一个 HTTP 请求。HTTP 虽然是一个文本协议,但也是基于 Socket 流式传输的。既然是流式的,那服务端就完全可以先只发送一部分数据、但是却不关闭这个流,这样客户端会认为没有接收完而选择继续等待,直到超时。

当然了,这是对于 HTTP/1.1 之前(先忽略 Keep-Alive,它不是重点)。在 HTTP/2 有了多路复用之后,多个 HTTP 请求底下对应的可能是同一个 Socket,这样就不能单纯地把“Socket 关闭”和“响应接收完毕”划等号了 —— A 请求的响应接收完了、B 请求的响应可未必也完了,此时 Socket 并不会关闭。

幸好制订 HTTP 协议时早就考虑好了和底层协议脱钩的事情,它是有 Content-Length 这个响应标头的,它指示了响应体应该有的实际长度,那么当客户端接收到符合的长度后,就认为本次 HTTP 的响应已经接收完毕了。

那么反过来想,如果服务端返回了一个错误 Content-Length,比如返回了 100,但是响应体却只有 99,客户端就会认为本次请求还没结束,那么它就会接着等。

你可以用 Wireshark 之类的抓包看一下(需要直接抓 TCP,而不是 DevTools/Fiddler/Charles 这种基于 HTTP 的,因为如上文所言,这个 HTTP 报文会被认为是“不完整的”,所以这些基于 HTTP 的抓包工具是不能正确解析的),观察一下这个请求的实际收到的字节数是不是小于 Content-Legnth 的

虽然未完整接收,但浏览器会先渲染接收到的那部分HTML。

比如我用 Fiddler 拦截了 www.baidu.com 的请求,把它的 Content-Type 改成了 999999,然后浏览器就会一直转圈、但是会先渲染收到的那部分 HTML :

查看原文


该文章在 2023/8/29 10:37:07 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved