大致流程
- URL 解析
- DNS 查询
- TCP 连接
- 处理请求
- 接受响应
- 渲染页面
个人理解分为以下几步:
● 浏览器每次访问网站,会在浏览器本地生成缓存,当用户第二次去访问时,会检测到相应缓存,直接进行访问。
● 如果浏览器没有检查到缓存,那么就会去访问系统缓存(也就是我们说的Hosts)。
● 如果本地也没有缓存,那么浏览器就会去检测路由器缓存,进而再检查ISP(运营商)缓存。
● 如果以上缓存都没有找到需求资源,浏览器则会在根域名服务器查找对应的IP地址,并进行访问。
一、大致流程图
三次握手
建立DCP连接,获取到对应的IP后,客户端向HTTP服务器发起TCP连接
第一次握手:
建立连接时,客户端发送SYB + 1 (建立联机)包到服务器,进入等待状态(1表示成功,0表示失败)
第二次握手:
服务器收到SYN+1包后,确认信息,也返回一个ACK+1(确认联机)包,同时将这两个包返回给客户端,并进入等待状态
第三次握手:
客户端收到返回的两个包后,确认信息后,再给服务器发送一个ACK+1包,服务器收到后,进入TCP链接成功状态
● 发送HTTP请求与服务器建立连接后,就可以向服务器发起请求
● 服务器处理请求,服务器收到请求后,开始解析请求信息,通过相应的资源文件,处理用户请求和参数,并调用数据库信息,将结果返回给客户端。
● 返回响应数据在HTTP有请求就有响应,返回状态码。
状态码
101 继续请求,切换协议
200成功
201已创建新资源
202服务器已接收请求,但尚未处理
301重定向永久移动,请求的网页已移动到新的位置
302临时移动
303查看其它位置
304未修改,
404客户端错误,服务器无法解释请求的格式,请求的网页不存在
503常见的服务器端错误,服务器不可用
四次挥手
关闭TCP连接,为了避免客户端与服务器的资源占用和损耗,双方没有请求或响应传递时,任意一方都可以发起关闭请求。
第1次挥手
本来是建立状态,客户端向服务器发起终止的请求后,进入等待状态
第2次挥手
服务器收到发送来的请求,先回复一个确认的信息,
第3次挥手
将所有的数据传送完之后,向客户端发一个终止的请求,进入关闭等待的状态
第4次挥手
客户端收到客户端的终止请求后,终止等待,并向服务器发送了一个确认关闭的信息。此时断开连接
● 浏览器解析HTML并渲染文档树建立,浏览器解析HTML并开始渲染DOM,使用浏览器渲染机制,页面渲染完成
● 浏览器渲染机制,浏览器将HTML解析成树形的数据结构,简称DOM树,将css解析成树形的数据结构,简称cssDom树两种书进行合并后生成render Tree(渲染树)
● layout是通过计算render Tree的每个节点的具体位置,通过显卡将layout的节点内容分别呈现到屏幕上这个过程可能会引起重绘和回流
● 重绘和回流回流必定会引起重绘,重绘不一定会引起回流,回流对我的结构发生变化,引起了重绘,改变样式,颜色不会对我的结构发生变化
优化:
减少对渲染树(render tree)的操作,合并多次多DOM和样式的修改,减少对一些style信息的请求,利用好浏览器的优化策略。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。