HTTP 报文

151 阅读4分钟

用于 HTTP 协议交互的信息被称为 HTTP 报文。 客户端的 HTTP 报文叫请求报文,服务端的 HTTP 报文叫响应报文。

请求报文 是由请求行(请求方法、协议版本)、请求首部(请求URI、客户端信息等)和内容实体(用户信息和资源信息等,可为空)构成。 image.png image.png

响应报文 是由状态行(协议版本、状态码)、响应首部(服务器名称、资源标识等)和内容实体(服务端返回的资源信息)构成。 image.png image.png

请求方法

  • GET:一般用于获取服务器资源
  • POST:一般用于传输实体主体
  • PUT:一般用于传输文件
  • DELETE:一般用于删除文件
  • HEAD:用于获取报文首部,不返回报文主体
  • OPTIONS:用于询问请求 URI 资源支持的方法

状态码

HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。 ​

2xx 系列

成功(表明请求被正常处理了)

200OK,表示从客户端发来的请求在服务器端被正确处理
204No Content,表示请求成功,但响应报文不含实体的主体部分
206Partial Content,进行范围请求成功

3xx 系列

重定向(表明浏览器需执行特殊处理)

301Moved Permanently,永久重定向,表示自愿已被分配了新的 URL
302Found,临时性重定向,表示资源临时被分配了新的 URL
303See Other,表示资源存在着另一个 URL,应使用 GET 方法获取资源
(对于 301/302/303 响应,几乎所有浏览器都会删除报文并自动用 GET 重新请求)
304Not Modified,表示服务器允许访问的自愿,但请求未满足条件的情况(与重定向无关)
307Temporary Redirect,临时重定向,和 302 含义类似。但是期望客户端保持请求方法不变向新的地址发出请求

4xx 系列

客户端错误

400Bad Request,请求报文存在语法错误
401Unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403Forbidden,表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述
404Not Found,表示在服务器上没有找到请求的资源

5xx 系列

服务器错误

500Internal Server Error,表示服务器在执行请求时发生了错误
501Not Implemented,表示服务器不支持当前请求所需要的某个功能
503Service Unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

首部字段

下面是请求首部和响应首部中的字段名称和作用

通用首部

  • Cache-Control
    • 控制缓存的行为
    • no-cache:强制向服务器再次验证
    • no-store**:**不做任何缓存
    • max-age=111111:资源可缓存最大时间(秒)
    • public:客户端、代理服务器都可利用缓存
    • private:代理服务器不可以缓存
  • Connection
    • 浏览器想要优先使用的连接类型
    • keep-alive:开启持久连接
    • close:关闭持久连接
  • Date
    • 创建报文时间
  • Pragma
    • 只用于请求报文,客户端要求中间服务器不返回缓存的资源
  • Via
    • 代理服务器相关信息,每经过一个代理服务器就会添加相关信息,用逗号分割
  • Transfer-Encoding
    • 传输编码方式
    • chunked:分块传输
  • Upgrade
    • 要求客户端使用的升级协议
    • 需配合 Connection: Upgrade 一起使用:websocket
  • Warning
    • 缓存相关问题的警告

请求首部

  • Accept
    • 能正确接收的媒体类型
    • application/json
    • text/plain
  • Accept-Charset
    • 能正确接收的字符集
    • unicode-1-1
  • Accept-Encoding
    • 能正确接收的编码格式列表
    • gzip
    • deflate
  • Accept-Language
    • 能正确接收的语言列表
    • zh-cn,zh;q=0.9,en,q=0.8
    • q=0.9 代表当前语言的权重
  • Authorization
    • 客户端认证信息
    • 一般存 token 用于鉴权
  • Cookie
    • 发送给服务器的 Cookie 信息
  • Expect
    • 期待服务端的指定行为
  • From
    • 请求方邮箱地址
  • Host
    • 服务器的域名,用于区分单台服务器多个域名的虚拟主机
    • 是 **HTTP/1.1 **唯一必须包含的字段
  • User-Agent
    • 客户端信息
  • Referer
    • 请求发起页面的原始 URI

响应首部

  • Accept-Ranges
    • 告知客户端服务器是否可接受范围请求
  • Age
    • 资源在代理缓存中存在的时间
  • Location
    • 客户端重定向到某个 URL
  • Server
    • 服务器名字
    • Apache
    • Nginx

实体首部

  • Allow
    • 资源的正确请求方式
    • GET POST PUT
  • Content-Language
    • 内容使用的语言
    • zh-CN
  • Expires
    • 内容的过期时间
  • Last-modified
    • 内容的最后修改时间