报文
结构
用于HTTP协议交互的信息被称为HTTP报文,包含 请求报文 和 响应报文。
主要结构:
- 头信息(headers)
- 起始行(start line)
- 头字段
- 空行(CR + LF,回车 + 换行,\r\n)
- 数据(body),不一定有

请求报文
- 请求行:方法、URI、协议版本
- 请求头
- 空行
- body
yaml
# 请求行
GET /network/http/messages.md?import&t=1711193606226 HTTP/1.1
# 请求头
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:90
Origin: http://localhost:90
Pragma: no-cache
Referer: http://localhost:90/@vite/client
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
# 空行
# 内容
<body>

响应报文
- 状态行:协议版本、状态码、状态文本
- 响应头
- 空行
- body
yaml
# 状态行
HTTP/1.1 200 OK
# 响应头(Response Headers)
Access-Control-Allow-Origin: *
Content-Type: text/javascript
Cache-Control: no-cache
Etag: W/"2bc1-2OmtgqJa3bhCkpon4MM9plQMuWA"
Date: Sat, 23 Mar 2024 11:28:51 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 27312
# 空行
# 内容
(()=>...)

参考
- HTTP报文 - MDN
- 典型的 HTTP 会话 - MDN
请求方法 Request Method
主要:
- GET: 向服务器获取数据
- POST:将实体提交到指定的资源,通常会造成服务器资源的修改。
- PUT:上传文件,修改数据
- DELETE:删除服务器上的对象
- HEAD:获取报文头信息,与GET相比,不返回报文主体部分
- OPTIONS:询问支持的请求方法,用来跨域请求
其他:
- TRACE:追踪 请求—响应 的传输路径
- CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
参考
- HTTP 请求方法 - MDN
状态码 Status Code
2xx 成功响应 Success
状态码 | 状态 | |
---|---|---|
200 | OK | 请求成功 |
201 | Created | 请求已成功,并因此创建了一个新的资源 |
204 | No Content | 请求成功,但响应报文不含实体的主体部分 |
206 | Partial Content | 当从客户端发送Range范围标头以只请求资源的一部分时,将使用此响应代码 |
3xx 重定向 Redirection
状态码 | 状态 | |
---|---|---|
301 | Moved Permanently | 永久性重定向,在响应中给出了新的 URL。 |
302 | Found | 临时性重定向,表示资源临时被分配了新的 URL |
303 | See Other | 表示资源存在着另一个 URL,应使用 GET 方法获取资源(对于301/302/303响应,几乎所有浏览器都会删除报文主体并自动用GET重新请求) |
304 | Not Modified | 协商缓存,它告诉客户端响应还没有被修改,可以使用客户端缓存 |
307 | Temporary Redirect | 临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求 |
302使用场景:
- 当你想将用户重定到正确的网站版本(基于位置/语言)时
- 当你要对网页的功能或设计进行 A / B 拆分测试时
- 你希望在不影响旧页面排名的情况下获得新页面的反馈时
- 当你正在进行促销,并希望暂时将访问者重定向到促销页面时
4xx 客户端错误 Client Error
状态码 | 状态 | |
---|---|---|
400 | Bad Request | 由于被认为是客户端错误(例如,错误的请求语法),服务器无法或不会处理请求 |
401 | Unauthorized | 客户端必须对自身进行身份验证才能获得请求的响应 |
403 | Forbidden | 客户端没有访问内容的权限 与 401 不同,403 服务器知道客户端的身份 |
404 | Not Found | 没有找到请求的资源 |
405 | Method Not Allowed | 服务器知道请求方法,但目标资源不支持该方法。例如,API 可能不允许调用DELETE来删除资源 |
5xx 服务端错误 Server Error
状态码 | 状态 | |
---|---|---|
500 | Internal Server Error | 服务器端在执行请求时发生了错误 |
501 | Not Implemented | 表示服务器不支持当前请求所需要的某个功能 |
502 | Bad Gateway | 此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应 |
503 | Service Unavailable | 表明服务器暂时处于超负载或正在停机维护,无法处理请求 |
504 | Gateway Timeout | 当服务器充当网关且无法及时获得响应时,会给出此错误响应 |
参考/更多
- HTTP 响应状态码 - MDN
请求头
- HTTP 标头(header) - MDN
Content-Type
- application/x-www-form-urlencoded:用于普通的 HTML 表单提交,在请求正文中将表单字段编码为键值对。
- multipart/form-data:用于上传文件或二进制数据的表单提交,请求正文以多部分形式进行编码。
- application/json:用于发送 JSON 格式的数据,请求正文中的数据将以 JSON 形式进行传输。
- text/plain:纯文本格式,适用于发送纯文本数据。
- application/xml:用于发送 XML 数据。
- text/html:用于发送 HTML 数据。
- application/octet-stream:用于发送二进制数据,如文件下载时使用。
- application/x-www-form-urlencoded;charset=UTF-8:类似于 application/x-www-form-urlencoded,但指定了字符编码为 UTF-8。
- 其他
参考
- MIME 类型(IANA 媒体类型) - MDN
- 常见 MIME 类型列表 - MDN
- 所有的MIME类型列表 - IANA官方