You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
由于不同主机之间都是通过IP地址来确定的,所以首先会进行域名解析,查询;
浏览器会向域名服务器去查询http://github.com对应的Ip.
// Ip查询也有一套优化机制: 缓存机制(可以减少网络请求)
浏览器缓存: 浏览器会按照一定的频率缓存 DNS 记录;
操作系统缓存: 如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中找;
路由缓存: 路由器也有 DNS 缓存;
ISP(互联网服务提供商)的DNS服务器: ISP 有专门的 DNS 服务器应对 DNS 查询请求;
根服务器: ISP 的 DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询;(DNS 服务器先问根域名服务器.com 域名服务器的 IP 地址,然后再问.github 域名服务器,依次类推)
连接终止使用了四路握手过程(或称四次握手,four-way handshake),在这个过程中连接的每一侧都独立地被终止。
当一个端点要停止它这一侧的连接,就向对侧发送FIN,对侧回复ACK表示确认。
因此,拆掉一侧的连接过程需要一对FIN和ACK,分别由两侧端点发出。
client侧: FIN ACK
server侧: ACK FIN
想要渲染一个完整的页面,除了获知每个节点的具体样式,还需要获知每一个节点在页面上的位置,
布局其实是找到所有元素的几何关系的过程。
这里通过遍历 DOM 及相关元素的计算样式,主线程会构建出包含每个元素的坐标信息及盒子大小的布局树。
布局树和 DOM 树类似,但是其中只包含页面可见的元素,如果一个元素设置了 `display:none` ,
这个元素不会出现在布局树上,伪元素虽然在 DOM 树上不可见,但是在布局树上是可见的。
浏览器下的一次网络请求流程
以输入 http://github.com/appleguardu为例,一次 web 请求本质上就是一台主机去另一台主机获取对应的资源.
1.进程切换
当导航栏输入 http://github.com/appleguardu/后, 浏览器进程把这个url交给网络进程处理, 给我去这台主机下取资源;
2.解析请求的URL,DNS查询IP,准备端口
如果不是特别指定,http协议默认的80端口
3.等待 TCP 队列(浏览器对tcp的限制)
chorome浏览器有个机制, 统一域名下同时最多只能建立 6 个 TCP连接(浏览器的限制可能不一样), 如果超过 6 个请求, 那么剩下的会进入排队等待的状态, 等待前面的完事后自己再去建立连接
4.建立 TCP 连接
TCP 协议
5.发送 HTTP 请求
当 TCP 连接建立之后, 浏览器与服务器之间开始通信,传输数据
构建请求报文
注意: 如果请求的是缓存资源,则会
终止请求
浏览器会对请求的文件资源进行检查, 如果这个请求的资源存在于浏览器缓存当中, 请求就会被拦截, 浏览器直接从本地缓存中获取后发给网络进程, 并结束此处请求过程
关于http缓存介绍
缓存分类
缓存可以简单的划分成两种类型: 强缓存(200 from cache)与协商缓存(服务端返回304);
强缓存
: 浏览器如果判断本地缓存未过期,就直接使用,无需发起http请求;协商缓存304:
当浏览器再次
向服务端发起http请求,然后服务端(304)告诉浏览器文件未改变,让浏览器使用本地缓存6.服务器处理 http 请求
当服务器接收到浏览器的请求报文后, 会交给对应的处理程序进行处理(此处省略...),然后想服务器返回响应报文
响应报文
注意
一般来说, 请求头部和响应头部是互相匹配的
如请求头部的Accept要和响应头部的Content-Type匹配,否则会报错;
跨域请求时,请求头部的Origin要匹配响应头部的Access-Control-Allow-Origin,否则会报跨域错误
还有在使用缓存时,
请求头部的If-Modified-Since、If-None-Match分别和
响应头部的Last-Modified、ETag相对应
以上基本都是通过服务端程序来控制的
重定向
当响应状态码是 301 时,会发生重定向, 浏览器进程重新让导航进行工作, 修改 location 字段中的地址,继续上述的请求流程
8.浏览器解析并渲染页面
浏览器进程开始调度, 渲染进程通过管道接受网络进程的html数据,开始解析html工作
渲染进程工作流
9.断开TCP连接
当数据传送完毕,需要断开 tcp 连接,此时发起 tcp 四次挥手; 参见 TCP 协议;
通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。
不过如果浏览器或者服务器在其头信息中加入了
TCP 连接在发送后将仍然保持打开状态,这样浏览器就可以继续通过同一个 TCP 连接 发送请求。
保持 TCP 连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。 比如,一个 Web 页面中内嵌的图片就都来自同一个 Web 站点,如果初始化了一个持久连 接,你就可以复用该连接,以请求其他资源,而不需要重新再建立新的 TCP 连接。
参考
TCP 协议百科
HTTP headers
The text was updated successfully, but these errors were encountered: