HTTP 报文格式

1,142 阅读2分钟

HTTPHyper Text Transfer Protocol 简写,超文本传输协议。在前端最重要的体现在于,浏览器(HTTP Client)与服务器(HTTP Server)之间的通信。

HTTP 是前后端沟通的桥梁,了解 HTTP 协议及报文相当重要。

HTTP 报文

HTTP 由请求(Request)及响应(Response)构成。报文格式如下,请忽略注释内容。

# 请求报文

# 首行由 Method Path Version 构成
# 每一行结尾是 \r\n
GET / HTTP/1.1
# 以下是请求头,Host 是请求的域名
Host: www.baidu.com
User-Agent: curl/7.79.1
Accept: */*

# 响应报文
# 相隔两个 \r\n,将会收到响应报文

# 首行由 Version StatusCode 状态描述符组成
HTTP/1.1 200 OK
# 以下是响应头
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2443
Content-Type: text/html
Date: Wed, 31 Aug 2022 09:23:42 GMT
Etag: "58860402-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

# 响应体
# 相隔两个 \r\n,将会收到响应体
<!DOCTYPE html>
...

通过 curl -v https://www.baidu.com 可以获得完整的响应报文以及响应体。

HTTP Client/Server

HTTP 由请求以及响应组成,负责请求的被称为 HTTP Client,即 HTTP 客户端,而负责响应的被称为 HTTP Server,即HTTP 服务器端。

在后端中,他们的 nginx/django/express/koa 等,便是扮演 HTTP 服务器端的角色,接收 HTTP 客户端的请求,分析路由、请求方法请求体,并返回对应的响应报文

在前端中,浏览器便是扮演 HTTP 客户端的角色,从代码层面来说,我们使用的 fetch/axios 就是 HTTP 客户端,各种编程语言的请求库以及 curl 都可以视为 HTTP 客户端。

在前后端联调 API 时,团队经常使用的 API 管理工具,ApifoxPostman 也属于 HTTP 客户端。

Apifox 中,可以通过导入 curl 生成各种语言请求库的请求。

作业

  1. 什么是 \r\n
  2. 如何找到文件中的 \r\n
  3. HTTP 报文格式是什么样的
  4. 我们如何查看某此请求的 HTTP 报文