从浏览器输出 URL 到页面加载的具体流程 (http 协定)
- 域名解析
- 建设 TCP 连贯
- 浏览器发送 HTTP 申请
- 服务器解决申请并返回 HTTP 报文
- 浏览器解析渲染页面
- 连贯完结
1. 域名解析
域名在解析的过程中会有多级缓存,首先浏览器会查找本身缓存中是否存在对应的 ip 信息,若没有则会进一步向操作系统的缓存要,还没有的话,则会查看本机的域名解析文件 hosts, 看是否存在对应的域名 – ip 配置信息。
如果通过以上步骤依然无奈获取域名对应的 ip 地址,则会被动向 DNS 服务器发动申请,获取 IP 地址。
DNS 域名零碎(Domain Name System)是互联网的一项服务。它作为将域名和 IP 地址互相映射的一个分布式数据库,可能使人更不便地拜访互联网。
以查问 zh.wikipedia.org 为例:
- 客户端发送查问报文 ”query zh.wikipedia.org” 至 DNS 服务器,DNS 服务器首先查看本身缓存,如果存在记录则间接返回后果。
- 如果记录老化或不存在,则:
DNS 服务器向根域名服务器发送查问报文 ”query zh.wikipedia.org”,根域名服务器返回顶级域 .org 的顶级域名服务器地址。 - DNS 服务器向 .org 域的顶级域名服务器发送查问报文 ”query zh.wikipedia.org”,失去二级域 .wikipedia.org 的权威域名服务器地址。
- DNS 服务器向 .wikipedia.org 域的权威域名服务器发送查问报文 ”query zh.wikipedia.org”,失去主机 zh 的 A 记录,存入本身缓存并返回给客户端。
2. 建设 TCP 连贯
HTTP 协定是在 TCP/IP 协定的根底上运行的,依附 TCP/IP 协定进行牢靠的数据传输,因而浏览器在发送申请前,须要先建设 TCP 连贯。
建设 TCP 连贯流程 (三次握手):
- 客户端(通过执行 connect 函数)向服务器端发送一个 SYN 包,申请一个被动关上。该包携带客户端为这个连贯申请而设定的随机数 A 作为音讯序列号。
- 服务器端收到一个非法的 SYN 包后,把该包放入 SYN 队列中;回送一个 SYN/ACK。ACK 的确认码应为 A +1,SYN/ACK 包自身携带一个随机产生的序号 B。
- 客户端收到 SYN/ACK 包后,发送一个 ACK 包,该包的序号被设定为 A +1,而 ACK 的确认码则为 B +1。而后客户端的 connect 函数胜利返回。当服务器端收到这个 ACK 包的时候,把申请帧从 SYN 队列中移出,放至 ACCEPT 队列中;这时 accept 函数如果处于阻塞状态,能够被唤醒,从 ACCEPT 队列中取出 ACK 包,从新创立一个新的用于双向通信的 sockfd,并返回。
3. 浏览器发送 HTTP 申请
TCP 连贯构建胜利后,浏览器依据 HTTP 协定规定的格局,构建 HTTP 申请报文并通过 TCP 协定发送到服务器指定端口,申请报文由三局部组成:申请行、申请报头和申请注释。
- 申请行:形容申请或响应的根本信息。
- 头部字段汇合:应用 key-value 模式更具体地阐明报文。
- 音讯注释:理论传输的数据,它不肯定是纯文本,能够是图片、视频等二进制数据。
4. 服务器解决申请并返回 HTTP 报文
HTTP 响应报文由三局部组成:
- 状态行:版本号、状态码、起因。
- 响应头部字段:应用 key-value 模式更具体地阐明报文。
- 响应注释:服务器发送给浏览器的内容。
5. 浏览器解析渲染页面
简要流程:
- HTML 解析与 DOM 树构建
- CSS 解析
- 渲染
6. 连贯完结
TCP 四次挥手,完结连贯。