输入网址后发生了什么?
浏览器查找域名对应 IP
DNS 查找过程
- 浏览器缓存
浏览器会记录 DNS 一段时间。 - 系统缓存
浏览器没找到 DNS 缓存,此时做一个系统调用。 - 路由器缓存
- ISP DNS 缓存
- 递归查找
DNS 缓存没有时,ISP DNS服务器会先后从 根域名服务器,顶级域名服务器等获取IP。
多 IP 域名 DNS 查询解决方案
- 循环DNS——单个域名、多个IP列表循环应对DNS查询
- 负载均衡器——一个特定IP的负载均衡服务器(例如:反向代理服务器)负责监听请求并转发给后面的多个服务器集群的某一个,实现多个服务器负载均衡
- 地理DNS——根据用户所处地理位置,返回不同的IP(应用:CDN)
- anycast——一个IP地址映射多个物理主机的路由技术
发送请求
得到域名对应的 IP,就开始发送 HTTP 请求。
|
|
- 我要获取(GET 的URL)这个页面
- Accept:我能接受这些类型的文件
- 我使用的是何种操作系统上的哪个类型那个版本的浏览器
- 承认接受何种方式的压缩文件
- 连接类型:短连接?长连接
- 主机域名
- 发送存储在本机的cookies信息给服务器(如果有)
网站迁移做了重定向设置时,服务器会进行一次重定向响应。
传输层通过 TCP 协议传输报文
TCP 连接三次握手
参见:传输层
网络层 IP 协议查询 MAC 地址
IP协议的作用是把TCP分割好的各种数据包传送给接收方,要保证确实能传到接收方还需要接收方的MAC地址。
ARP 协议可以将IP地址解析成对应的MAC地址。
参见:网络层
数据链路层传输
客户端找到对方IP对应的MAC地址后,就把数据发送到数据链路层传输。这时,客户端发送请求的过程的阶段才结束。
服务端接收数据
接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在运输层通过TCP协议讲分段的数据包重新组成原来的 HTTP 请求报文。
服务端处理请求,返回响应请求
服务器接收到获取请求,然后处理并返回一个响应。
浏览器渲染接收到的文件
HTML文件还没完整的接受到的时候,就开始显示这个页面了,一般最先开始显示的就是HTML中的纯DOM结构。
浏览器发送并获取嵌入到HTML文档里边的对象
这些对象其实就是浏览器解析到的CSS文件,JS文件,图片和其它一些资源。这些资源的获取都要重新经历HTML文件获取的过程。
浏览器的异步请求(AJAX)
页面显示完成后客户端仍与服务器端保持着联系(keep-alive)。
浏览器执行JavaScript,向服务器发送一系列的异步请求,从而更新页面上的局部区域,达到动态网站的效果。