#HTTP 协议

HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础

#DNS Domain Name System 域名系统

将域名与 IP 地址做一一映射 浏览器有 DNS数据缓存服务,解析过的域名会缓存,减少请求

#浏览器发起 HTTP 请求的流程

  1. 构建请求行 请求方法 + 请求 URI + HTTP 协议版本 例如:GET /index.html HTTP/1.1

  2. 查找缓存

    浏览器会在请求前查询浏览器缓存中是否有该文件,如果有则结束请求

  3. 准备 IP 地址与端口

    现在只有 URL,HTTP 需要与服务器建立 TCP 连接就需要 IP 地址与端口,所以通过一下方式获得

    • 请求 DNS 返回域名对应的 IP 地址
    • 从 URL 中获取端口号,HTTP 默认为 80
  4. 等待 TCP 队列

    Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。

    http/1.1 一个 tcp 同时只能处理一个请求,浏览器会为每个域名维护 6 个 tcp 连接

    但是每个 tcp 连接是可以复用的,也就是处理完一个请求之后,不断开这个 tcp 连接,可以用来处理下个 http 请求

    不过 http2 是可以并行请求资源的,所以如果使用 http2,浏览器只会为每个域名维护一个 tcp 连接

  5. 建立 TCP 连接

  6. 发送 HTTP 请求

    发送请求行 发送请求头 发送请求体(POST)

#服务器处理 HTTP 请求的流程

  1. 返回请求 返回响应行(协议版本+状态码 HTTP/1.1 200 OK) 返回响应头 返回响应体

  2. 断开连接 服务器返回完后会断链接 但是如果请求头中有Connection:Keep-Alive会保持 TCP 连接

  3. 重定向 响应头Location