HTTP - 2 - 从输入URL到页面展示,中间发生了什么?

请求过程
    1. 用户输入URL, 浏览器会根据用户输入的信息判断是搜索还是网址, 如果是搜索内容, 就将搜索内容+默认搜索引擎合成新的URL;如果用户输入的内容符合URL规则, 浏览器就会根据URL协议, 在这段内容上加上协议合成合法的URL
    1. 用户输入完内容, 按下回车键, 浏览器导航栏显示loading状态, 但是页面还是呈现前一个页面, 这是因为新页面的响应数据还没有获得
    1. 浏览器进程构建请求信息, 会通过进程间通信(IPC)将URL请求发送给网络进程
    1. 网络进程获取到URL, 先去本地缓存中查找是否有缓存文件, 如果有, 拦截请求, 直接200返回;否则, 进入网络请求过程
    1. 网络进程请求DNS返回域名对应的IP和端口号, 如果之前DNS数据缓存服务缓存过当前域名信息 ==> 直接返回缓存信息; 否则, 根据DNS解析出来的IP/PORT发起请求,如果没有PORT, HTTP默认80端口, HTTPS默认443端口,如果是HTTPS请求,还需要建立TLS(传输层安全性协议)连接.
    1. Chrome浏览器有个机制, 同一个域名同时最多只能建立 6 个TCP 连接, 如果在同一个域名下同时有 10 个请求发生, 那么其中 4 个请求会进入排队等待状态, 直至进行中的请求完成. 直至进行中的请求完成。如果当前请求数量少于6个, 会直接建立TCP连接
    1. TCP三次握手建立连接: http请求加上TCP头部(源端口号,目的端口号,和用于校验数据完整性的序号)向下传输
    1. 网络层在数据包上加上IP头部——包括源IP地址和目的IP地址, 继续向下传输到底层
    1. 底层通过物理网络传输给目的服务器主机
    1. 目的服务器主机网络层接收到数据包, 解析出IP头部, 识别出数据部分, 将解开的数据包向上传输到传输层
    1. 目的服务器主机传输层获取到数据包, 解析出TCP头部, 识别端口, 将解开的数据包向上传输到应用层
    1. 应用层HTTP解析请求头和请求体, 如果需要重定向, HTTP直接返回HTTP响应数据的状态code301或者302, 同时在请求头的Location字段中附上重定向地址, 浏览器会根据code和Location进行重定向操作;如果不是重定向, 首先服务器会根据 请求头中的If-None-Match 的值来判断请求的资源是否被更新, 如果没有更新, 就返回304状态码, 相当于告诉浏览器之前的缓存还可以使用, 就不返回新数据了;否则, 返回新数据, 200的状态码, 并且如果想要浏览器缓存数据的话, 就在相应头中加入字段: Cache-Control:Max-age=2000, 响应数据又顺着应用层——传输层——网络层——网络层——传输层——应用层的顺序返回到网络进程
    1. 数据传输完成, TCP四次挥手断开连接。如果浏览器或者服务器在HTTP头部加上Connection:Keep-Alive信息, TCP就一直保持连接。保持TCP连接可以省下下次需要建立连接的时间, 提示资源加载速度
    1. 网络进程将获取到的数据包进行解析, 根据响应头中的Content-type来判断响应数据的类型, 如果是字节流类型, 就将该请求交给下载管理器, 该导航流程结束, 不再进行;如果是text/html类型, 就通知浏览器进程获取到文档准备渲染
    1. 浏览器进程获取到通知, 根据当前页面B是否是从页面A打开的并且和页面A是否是同一个站点(根域名和协议一样就被认为是同一个站点), 如果满足上述条件, 就复用之前网页的进程, 否则, 新创建一个单独的渲染进程
    1. 浏览器会发出提交文档的消息给渲染进程, 渲染进程收到消息后, 会和网络进程建立传输数据的管道, 文档数据传输完成后, 渲染进程会返回确认提交的消息给浏览器进程
    1. 浏览器收到确认提交的消息后, 会更新浏览器的页面状态, 包括了安全状态、地址栏的 URL、前进后退的历史状态, 并更新web页面, 此时的web页面是空白页
    1. 渲染进程对文档进行页面解析和子资源加载, HTML 通过HTM 解析器转成DOM Tree(二叉树类似结构的东西), CSS按照CSS 规则和CSS解释器转成CSSOM TREE, 两个tree结合, 形成render tree(不包含HTML的具体元素和元素要画的具体位置), 通过Layout可以计算出每个元素具体的宽高颜色位置, 结合起来, 开始绘制, 最后显示在屏幕中新页面显示出来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值