zhangdizhangdi

报文

结构

用于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
# 空行

# 内容
(()=>...)

响应报文
图:响应报文

参考

请求方法 Request Method

主要:

  • GET: 向服务器获取数据
  • POST:将实体提交到指定的资源,通常会造成服务器资源的修改。
  • PUT:上传文件,修改数据
  • DELETE:删除服务器上的对象
  • HEAD:获取报文头信息,与GET相比,不返回报文主体部分
  • OPTIONS:询问支持的请求方法,用来跨域请求

其他:

  • TRACE:追踪 请求—响应 的传输路径
  • CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
参考

状态码 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 当服务器充当网关且无法及时获得响应时,会给出此错误响应
参考/更多

请求头

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。
  • 其他
参考