Loading

一次完整的 HTTP 请求通信过程

一次完整的 HTTP 请求通信过程。

1. 建立 TCP 连接

在 HTTP 工作开始之前,客户端首先要通过网络与服务器建立连接,该连接是通过 TCP 协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有底层协议建立之后才能进行更高协议的连接。因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是 80。

2. 向服务器发送请求

TCP 连接建立之后,客户端就会想服务端发送请求。一个请求由 4 部分组成:

  • 请求行:包括请求方法、请求 URI 和 HTTP 版本,用空格分隔
  • 请求头标:每行一个键值对,用冒号分隔
  • 空行:表示请求头发送完成
  • 请求数据:POST 请求的 body 数据

image

请求方法 描述
GET 请求指定的页面信息,并返回响应体
HEAD 类似 GET,服务器只返回状态码和响应头信息,响应无具体内容
POST 向指定资源提交数据,数据被包含在请求体中,可以创建或更新资源
PUT 向指定资源提交数据,服务器更新资源
DELETE 向服务器提交删除指定资源
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器

服务器应该至少实现 GET/POST 方法,其他方法都是可选的。
客户端请求头信息发送完成后,需要再发送一个空行,表示请求头发送完成,然后发送请求数据。

3. 服务器响应

服务器接收到请求后,定位指定资源,回送响应,一个响应由 4 部分组成:

  • 状态行:包括 HTTP 版本、响应代码和响应描述
  • 响应头标:标识出响应数据的细节
  • 空行:表示响应头发送完成
  • 响应数据:HTML、Json 等具体数据

image

状态码 描述
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误

经常遇到的状态码:

  • 302:资源临时移动,服务器目前从不同位置的网页响应请求,但应使用原有位置进行之后的请求
  • 400:请求参数或语法出现错误
  • 403:服务器拒绝此请求,无权限
  • 404:资源未找到
  • 500:服务器内部错误,无法完成请求
  • 502:错误网关,服务器作为网关或代理,从上游服务器收到无效响应。
  • 503:服务不可用,服务器目前无法使用(由于超载或停机维护,暂时状态)

服务器也会随同响应发送关于响应内容的头信息,之后发送空白行,表示结束头信息的发送。

4. 服务器向客户端发送数据

以 Content-Type 响应头信息所描述的格式发送给客户端所请求的实际数据。

5. 客户端接收数据

客户端解析状态行,查看请求是否成功,然后解析响应头,根据响应头信息解析响应数据,用于展示或继续处理。

6. 服务器关闭 TCP 连接

一般情况下,服务器发送完请求数据后,就要关闭 TCP 连接。如果请求头内加入了 Connection:keep-alive,该连接会依然保持打开状态,浏览器就可以继续通过相同的连接发送请求。节省了请求重新建立连接所需要的时间,还节约了网络带宽。

拓展延伸

从浏览器输入 URL 到展示结果,发生了什么?segmentfault

1. DNS 域名解析 - 应用层协议

客户端收到输入的域名地址后,首先取中啊本地的 hosts 文件,检查在文件中是否有相应的域名、IP 对应关系

  • 如果有,则向其 IP 地址发送请求
  • 如果没有,再去找 DNS 服务器

image

2. 建立 TCP 连接 - 传输层协议

三次握手

  • 客户端发送带有 SYN 标志的数据包给服务端
  • 服务端收到后回传一个带有 SYN/ACK 标志的数据包表示确认收到
  • 客户端再回传一个带有 ACK 标志的数据包,代表握手结束,连接成功

image

3. 发送 HTTP 请求

与服务器建立建立连接后,就可以向服务器发送请求了。

4. 服务器处理请求

服务器收到请求后由 http 服务器处理请求,比如 Apache、Ngnix 等。服务器解析用户请求后,调度资源文件,调用数据库信息,最后将结果通过服务器返回给浏览器客户端。

image

5. 关闭 TCP 连接

为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。

image

6. 浏览器解析 HTML

准确的说,浏览器需要加载解析的不仅仅是 HTML,还包括 CSS、Js、图片、视频等媒体资源。

  • 解析 HTML,生成 DOM 树
  • 解析 CSS,生成 CSS 规则树
  • 通过 DOM 树和 CSS 规则树生成渲染树

7. 浏览器布局渲染

根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。

最后浏览器绘制各个节点,将页面展示给用户。

posted @ 2023-03-08 14:14  ABEELAN  阅读(101)  评论(0编辑  收藏  举报