抛出一个问题,从输入url地址栏到所有内容显示到界面上做了哪些事?
1.浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址;2.建立TCP连接(三次握手);3.浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;4.服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器;5.浏览器将该html文本并显示内容;6.释放TCP连接(四次挥手);上面这个问题是一个面试官非常喜欢问的问题,我们下面把这6个步骤分解,逐步细谈优化。
一、DNS解析DNS`解析:将域名解析为ip地址,由上往下匹配,只要命中便停止
-走缓存-浏览器DNS缓存-本机DNS缓存-路由器DNS缓存-网络运营商服务器DNS缓存(80%的DNS解析在这完成的)-递归查询
优化策略:尽量允许使用浏览器的缓存,能给我们节省大量时间,下面有dns-prefetch的介绍,每次dns解析大概需要20-秒
二、TCP的三次握手SYN(同步序列编号)ACK(确认字符)
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
三、浏览器发送请求优化策略:
1.HTTP协议通信最耗费时间的是建立TCP连接的过程,那我们就可以使用HTTPKeep-Alive,在HTTP早期,每个HTTP请求都要求打开一个TCPsocket连接,并且使用一次之后就断开这个TCP连接。使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少TCP连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高