1、浏览器打开网页加载的流程
1、DNS解析获取资源所在服务器的IP地址
2、然后通过:TCP/IP 三次握手 建立TCP链接,发起http请求
3、浏览器请求下载html
4、解析html并渲染页面,如果有link 、script、img 标签,停止渲染,就继续下载这些资源文件,下载完之后继续渲染。
5、四次挥手 中断链接请求;
1、DNS解析的过程:
域名层次结构:
域名管理归属:
1-1: 客户端在浏览器访问www.baidu.com 的网站时,浏览器向本地DNS服务器,发起www.baidu.com 这个域名对应的IP地址的查询。如果本地DNS服务器存在该记录,就把IP地址返回给浏览器。如果没有,本地DNS服务器就向DNS根服务器发起查询请求;
1-2: 本地DNS服务器,向DNS根服务器发起查询www.baidu.com IP地址的请求,根DNS服务器把对应的顶级域名所在服务器地址A返回给本地DNS服务器;
1-3: 本地DNS服务器,根据地址A,继续向顶级DNS服务器发起查询www.baidu.com IP地址的请求;顶级DNS服务器把对应的二级域名所在服务器地址B返回给本地DNS服务器;
1-4: 本地DNS服务器,根据地址B,继续向二级DNS服务器发起查询www.baidu.com IP地址的请求,二级DNS服务器发现有这条记录,然后对应的IP地址,返回给本地DNS域名服务器。
1-5: 本地DNS服务器,拿到对应的IP之后返回给浏览器,并且把这个域名对应的IP保存起来。
2、三次握手的流程
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个数据包以确认连接的建立。 在socket编程中, 这一过程由客户端执行connect来触发,整个流程如下:
2-1 第一次握手:Client随机产生一个值J赋给标志位SYN(Synchronize Sequence Numbers:同步序列号),即SYN=j。并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待Server确认。
2-2 第二次握手:Server收到数据包后知道Client请求建立连接,Server将标志位SYN随机产生一个值为k和ACK=j+1(ACK:确认字符Acknowledgement),并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
2-3 第三次握手:Client收到确认后,检查ack是否为J+1,如果正确则发送ack=K+1数据包发送给Server,Server检查ack是否为K+1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
3、浏览器缓存机制
浏览缓存,是对第二次访问,或者刷新页面的场景:
浏览器缓存的目的:
1、减少服务器带宽消耗(用户节省流量);
2、减少服务器的压力;
3、提高页面渲染的速度。
3-1、浏览器请求静态资源时
以下说明都是针对有缓存的情况:
服务端在响应头返回的3个重要字段:
cache-control:
cache-control的取值: max-age/ (public/private)/immutable/no-cache/no-store max-age:是缓存的有效时间;
public:客户端和代理服务器都可以缓存该资源;
private:只让客户端可以缓存该资源;代理服务器不缓存;
immutable:在缓存有效的时间内,就算用户刷新页面,浏览器也不会发起请求去服务;
客户端第二次打开页面,在缓存的有效时间的期内,就直接读取缓存,statu code:200 ;
如果用户做了刷新操作,就向服务器发起http请求:statu code:304
如果用户强制刷新(清理了缓存,再请求),就和第一次打开一样,重新向服务器请求资源,除了设置为public或者immutable的资源
cache-control: no-cache 跳过本地缓存,每次都服务端请求,no-cache等同于max-age=0。
cache-control: no-store 不缓存,这个会让客户端、服务器都不缓存
ETag:(Entity Tag)实体唯一标签(资源唯一标签)
last-modified:资源最后修改时间
以下是第二次发起请求的流程:
4、关闭TCP链接的四次握手的流程
第1次握手:客户端接受数据完毕,向服务器发送关闭链接的数据包,FIN=1(finish),序列号seq=u; 此时客户端进入终止等待状态1(FIN-WAIT-1)
第2次握手:服务器收到关闭连接的数据包之后,给客户端发送确认接收数据包:ACK=1,ack=u+1(确认FIN),序列号seq=v;
此时:服务器进入关闭等待状态(close-wait),不接受客户端任何请求了,服务器同时检查一遍客户端需要的数据是不是真的发送完毕,
如果还有需要发送的数据,就继续给客户端发送,这时客户端仍然可以接受数据。
2-1:客户端收到服务器的确认包之后,客户端进入终止等待2状态(FIN-WAIT-2),这时如果服务器有数据发过来继续接收。
第3次握手:服务器确认数据发送完毕后,向客户端发送关闭连接的数据包,FIN=1, ACK=1,ack=u+1(确认上次数据包)序列号seq=w;
此时服务器进入等待确认关闭状态(last-ack)
第4次握手:客户端收到服务器关闭连接的数据报之后,向服务器发出确认数据包 ACK=1,ack=w+1(确认上次数据包),seq=u+1, 此时:客户端进入时间等待状态(Time-wait)
5、服务端收到客户端发送的确认数据包后断开TCP连接,
6、客户端等待时长为:2MSL Maximum Segment Lifetime MSL:的值根据不同的情况而不同,一般30s 60s 120s; 直到这个时间内没有收到服务器任何数据包,等待时间到了,客户端断开连接。
目的:保证客户端发送的最后一个确认关闭数据包,服务端可以收到。在这个时间内如果没有服务器没有收到确认的数据包。服务器会认为客户端没有收到第三次握手的数据包 ,此时就会重新向客户端发送一次。客户端收到之后,就发送第四次握手的数据包,并重置2MSL。