浏览器与服务器的交互
- 在浏览器输入URL
- 浏览器根据URL查找对应的域名的IP地址,查找顺序浏览器缓存-本机缓存-本机hosts文件-路由器缓存,若都没有找到跳到3,找到了跳到4
- 使用域名解析,找到对应IP;
- 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
- 握手成功后,浏览器向服务器发送http请求,请求数据包。
- 服务器处理收到的请求,将数据返回至浏览器
- 浏览器收到HTTP响应
- 读取页面内容,浏览器渲染,解析html源码
- 生成Dom树、解析css样式、js交互
- 客户端和服务器交互
- ajax查询
- 断开链接
具体的细节
- 三次握手细节:
- 主机向服务器发送一个建立连接的请求(您好,我想认识您);
- 服务器接到请求后发送同意连接的信号(好的,很高兴认识您);
- 主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器两者建立了连接。
TCP 协议:三次握手的过程采用 TCP 协议,其可以保证信息传输的可靠性,三次握手过程中,若一方收不到确认信号,协议会要求重新发送信号。
断开链接
- 四次挥手:
- 主机向服务器发送一个断开连接的请求(不早了,我该走了);
- 服务器接到请求后发送确认收到请求的信号(知道了);
- 服务器向主机发送断开通知(我也该走了);
- 主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接;
补充说明:
- 为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所以服务器先发送确认信号,等所有数据发送完毕后再同意断开。
- 第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。
参考:
从输入 URL 到页面加载完成的过程中都发生了什么
一个页面从输入URL到页面加载显示完成,这个过程都发生什么?