HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础
将域名与 IP 地址做一一映射 浏览器有 DNS数据缓存服务,解析过的域名会缓存,减少请求
构建请求行
请求方法 + 请求 URI + HTTP 协议版本
例如:GET /index.html HTTP/1.1
查找缓存
浏览器会在请求前查询浏览器缓存中是否有该文件,如果有则结束请求
准备 IP 地址与端口
现在只有 URL,HTTP 需要与服务器建立 TCP 连接就需要 IP 地址与端口,所以通过一下方式获得
等待 TCP 队列
Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。
http/1.1 一个 tcp 同时只能处理一个请求,浏览器会为每个域名维护 6 个 tcp 连接
但是每个 tcp 连接是可以复用的,也就是处理完一个请求之后,不断开这个 tcp 连接,可以用来处理下个 http 请求
不过 http2 是可以并行请求资源的,所以如果使用 http2,浏览器只会为每个域名维护一个 tcp 连接
建立 TCP 连接
发送 HTTP 请求
发送请求行 发送请求头 发送请求体(POST)
返回请求
返回响应行(协议版本+状态码 HTTP/1.1 200 OK
)
返回响应头
返回响应体
断开连接
服务器返回完后会断链接
但是如果请求头中有Connection:Keep-Alive
会保持 TCP 连接
重定向
响应头Location