从输入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链接,必然要说的就是『三次握手』
3.http请求
建立TCP连接之后,发起HTTP请求,请求一般分为三部分
- 请求方法URI协议/版本
- 请求头(Request Header)
- 请求正文
4.服务端处理
服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端,这些返回结果以http响应报文形式,有以下几点组成:
- 状态码
- 响应头
- 响应正文
4.1 状态码
1 | 1xx:指示信息–表示请求已接收,继续处理。 |
5.关闭TCP连接
为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。
6.浏览器资源解析
对于返回后的响应正文内容,如css/html/js等等资源,浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain,下面是流程图:
7.总结
这里面涉及到一些网页优化问题,后面学习后再次补充
8.参考文章
1 | https://segmentfault.com/a/1190000006879700 |