After URL

输入网址后发生了什么?

浏览器查找域名对应 IP

DNS 查找过程

  1. 浏览器缓存
    浏览器会记录 DNS 一段时间。
  2. 系统缓存
    浏览器没找到 DNS 缓存,此时做一个系统调用。
  3. 路由器缓存
  4. ISP DNS 缓存
  5. 递归查找
    DNS 缓存没有时,ISP DNS服务器会先后从 根域名服务器顶级域名服务器等获取IP。

多 IP 域名 DNS 查询解决方案

  • 循环DNS——单个域名、多个IP列表循环应对DNS查询
  • 负载均衡器——一个特定IP的负载均衡服务器(例如:反向代理服务器)负责监听请求并转发给后面的多个服务器集群的某一个,实现多个服务器负载均衡
  • 地理DNS——根据用户所处地理位置,返回不同的IP(应用:CDN)
  • anycast——一个IP地址映射多个物理主机的路由技术

发送请求

得到域名对应的 IP,就开始发送 HTTP 请求。

1
2
3
4
5
6
7
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:JSESSIONID=0ED502F94D370F73E39723CDE43DF760
Host:www.whu.edu.cn
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
  1. 我要获取(GET 的URL)这个页面
  2. Accept:我能接受这些类型的文件
  3. 我使用的是何种操作系统上的哪个类型那个版本的浏览器
  4. 承认接受何种方式的压缩文件
  5. 连接类型:短连接?长连接
  6. 主机域名
  7. 发送存储在本机的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,向服务器发送一系列的异步请求,从而更新页面上的局部区域,达到动态网站的效果。


感谢:
http://mmzer.net/2017/02/08/%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BB%8E%E8%BE%93%E5%85%A5%E7%BD%91%E5%9D%80%E5%88%B0%E6%98%BE%E7%A4%BA%E9%83%BD%E5%8F%91%E7%94%9F%E4%BA%86%E4%BA%9B%E4%BB%80%E4%B9%88%EF%BC%9F/