从输入url到页面加载经历了什么

235 阅读3分钟

1.输入url并且回车

常见url:https://www.baidu.com  协议名 域名 端口号
常见协议名:http https ftp
端口号:http:80 https:443

2.查找当前url是否有缓存以及缓存是否过期,过期就往下走,没过期就渲染页面

缓存:强制缓存(Expires:时间节点 cache-control:时长) 协商缓存

3.DNS解析URL对应ip

DNS域名解析(域名解析),DNS实际上是一个域名和IP对应的数据库。
1)首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。
2)如果没找到则会查找本地DNS解析器缓存,如果找到则返回。
3)如果还是没有找到则会查找本地DNS服务器,如果找到则返回。
最后迭代查询,按根域服务器库(.com,.cn,.vip,.top...)->顶级域(.com),然后根据顶级域(.com)->第二层域子域(baidu.com),最后根据baidu.com的域名找到相应的IP,返回给浏览器。
(来源于链接:https://www.jianshu.com/p/0054fa46e22b\  )侵删

4.根据ip建立tcp链接(三次握手)

5.http请求

完整的HTTP请求包含请求起始行、请求主体和请求头部三部分。

6.服务器处理请求并且响应

HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
http常见状态码:
    **1:信息性状态码**
    100 (继续) 请求者应当继续提出请求。
    101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
    **2:成功状态码**
    200:OK 请求正常处理
    204:No Content 请求处理成功,但没有资源可返回
    206:Partial Content 对资源的某一部分的请求
    **3:重定向状态码**
    301:Moved Permanently 永久重定向
    302:Found 临时重定向
    **4:客户端错误状态码**
    400:Bad Request 请求报文中存在语法错误
    403:Forbidden 访问被拒绝
    404Not Found 无法找到请求资源
    **5:服务器错误状态码**
    500:Internal Server Error 服务器端在执行时发生错误
    503:Service Unavailable 服务器处于超负载或者正在进行停机维护

7.浏览器接收http响应并且渲染页面,构建DOM树

页面渲染:

浏览器按顺序解析html文件,构建DOM树,在解析到外部的css和js文件时,向服务器发起请求下载资源,若是下载css文件,则解析器会在下载的同时继续解析后面的html来构建DOM树;若在下载js文件,解析器会停止对html的解析,这就出现了js阻塞问题。

预加载器

当浏览器被脚本文件阻塞时,预加载器(一个轻量级的解析器)会继续解析后面的html,寻找需要下载的资源。如果发现有需要下载的资源,预加载器在开始接收这些资源。预加载器只能检索HTML标签中的URL,无法检测到使用脚本添加的URL,这些资源要等脚本代码执行时才会获取。

8.关闭tcp链接(四次挥手)

第一次握手是浏览器发完数据,然后发送FIN请求断开连接。
第二次握手是服务器向客户端发送ACK,表示同意。
第三次握手是服务器可能还有数据向浏览器发送,所以向浏览器发送ACK同时也发送FIN请求,是第三次握手。
第四次握手是浏览器接受返回的ACK,表示数据传输完成。

作者:郭先生_515
链接:www.jianshu.com/p/0054fa46e… 来源:简书 侵删