0%

从输入url到返回页面发生的事

从输入url到返回页面发生的事

1.DNS解析

1.1 定义

DNS解析就是将网址解析成IP的过程

1.2 解析过程

DNS解析是递归查询的过程,主要有以下先后关系

  • 先在本地域名服务器查询IP地址
  • 如果上一步未查到,到根域名服务器查询
  • 根域名服务器不存在,则本地域名会向com顶级域名服务器发送请求

1.3 DNS缓冲

如果每次都这么多查询步骤会特别麻烦,为了优化DNS解析,通过DNS缓冲技术减少请求步骤

1
DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。

1.4 DNS负载均衡

DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向,例子如CDN

2.TCP连接

在拿到域名对应的IP地址后,会以随机端口(1024~~65535)向WEB服务器程序80端口发起TCP的连接请求,这个连接请求进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接,对于客户端与服务器的TCP链接,必然要说的就是『三次握手』

undefined

3.http请求

建立TCP连接之后,发起HTTP请求,请求一般分为三部分

  • 请求方法URI协议/版本
  • 请求头(Request Header)
  • 请求正文

4.服务端处理

服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端,这些返回结果以http响应报文形式,有以下几点组成:

  • 状态码
  • 响应头
  • 响应正文

4.1 状态码

1
2
3
4
5
6
7
8
9
1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。

5.关闭TCP连接

为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。

undefined

6.浏览器资源解析

对于返回后的响应正文内容,如css/html/js等等资源,浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain,下面是流程图:
undefined

7.总结

这里面涉及到一些网页优化问题,后面学习后再次补充

8.参考文章

1
2
https://segmentfault.com/a/1190000006879700
https://www.cnblogs.com/yuanzhiguo/p/8119470.html