关于http:从浏览器输入URL到页面加载的具体流程http协议

40次阅读

共计 1395 个字符,预计需要花费 4 分钟才能阅读完成。

从浏览器输出 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 四次挥手,完结连贯。

正文完
 0