HTTP 请求相关的知识整理

前言

之前一直没有关注过协议相关的内容,所以导致自己好像犯了些很蠢的错误。如今回头看看捡捡应该对自己的成长有很大的益处吧!

超文本传输协议原文

请求报文

注:请求报文部分仅仅为了对之前的知识进行整理和补充,在下面的内容才是协议相关的内容。

HTTP 报文的格式如下

1
2
3
4
5
6
7
请求方法 URL 协议版本 // 请求行

头部字段名: 对应值 // 请求头
...
头部字段名: 对应值

请求数据 // 请求体

请求方法总览

协议中规定的请求方法有以下几种

请求方法 说明
GET 检索信息
HEAD HEAD方法与GET相同,不同之处在于服务器在响应中不得发送消息正文
POST 向指定资源提交数据处理请求
PUT 从客户端向服务器传送的数据取代指定的文档的内容
DELETE 移除目标资源
CONNECT 经过目标资源验证后建立一条与服务器通信的管道
OPTIONS 描述与目标资源的通信选项
TRACE 与目标资源之间的回路测试

注:这个官方文档读起来真费劲。。。。

安全方法

如果请求方法的定义语义本质上是只读的,则将其视为“安全方法“。

在协议中将 GET, HEAD, OPTIONS, TRACE 方法定义为了安全方法。

注:此处的只读指的是针对于目标数据而言,日志记录等操作不在考虑范围内。

幂等方法

如果使用该方法的多个相同请求在服务器上的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等方法” 。

在协议中将 PUT, DELETE 方法规定为了幂等方法。

注:此处的幂等指的是针对于目标数据而言,日志记录等操作不在考虑范围内。

可缓存的方法

可以将结果数据进行存储以供后来者取用的方法就是可缓存的方法。

在协议中将 GET, HEAD, POST 方法规定为了可缓存的方法。

状态码说明

在协议中规定了如下四类状态码

提示信息 (1xx)

状态代码的1xx类别指示临时响应,用于在完成请求的操作并发送最终响应之前传达连接状态或请求进度。

状态码 说明
100(Continue) 持续接受请求
101(Switching Protocols) 服务器理解并向客户端指出要升级到的协议

成功请求 (2xx)

状态代码的2xx类表示服务器已成功接收并理解和接受了客户的请求。

状态码 说明
200(OK) 请求成功
201(Created) 请求成功并创建了新资源
202(Accepted) 该请求已被接受进行处理,但处理尚未完成
203(Non-Authoritative Information) 所得到的内容和原始服务器的返回内容可能不完全一致
204(No Content) 服务器执行成功但是没有任何数据返回
205(Reset Content) 表单重置

重定向 (3xx)

状态代码的3xx类标识用户需要采取进一步的措施才能满足请求。

状态码 说明
300(Multiple Choices) 目标有多种
301(Moved Permanently) 已为目标资源分配了新的地址
302(Found) 目标资源暂时位于其他地址
303(See Other) 正在重定向用户请求到其他地址
305(Use Proxy) 已弃用
306(Unused) 已弃用
307(Temporary Redirect) 临时重定向

客户端异常 (4xx)

状态代码的4xx类表明客户端似乎已出错。

状态码 说明
400(Bad Request) 服务器无法处理用户传入的请求
402(Payment Required) 协议留用
403(Forbidden) 权限不足
404(Not Found) 资源不存在
405(Method Not Allowed) 请求方法异常
406(Not Acceptable) 目标资源与请求资源不符
408(Request Timeout) 服务器在限定时间内未收到完整的请求消息
409(Conflict) 与目标资源的当前状态冲突而无法完成请求
410(Gone) 在服务器上不再可以访问目标资源
411(Length Required) 必须传入Content-Length
413(Payload Too Large) 请求有效负载大于服务器愿意或能够处理的请求
414(URI Too Long) 请求目标长度大于服务器愿意解释的长度
415(Unsupported Media Type) 服务器拒绝为请求提供服务,因为有效负载的格式不受目标资源上此方法的支持
417(Expectation Failed) 服务器无法满足请求设定的Expect参数
426(Upgrade Required) 服务器拒绝使用当前协议执行请求

服务器端异常 (5xx)

状态代码的5xx类表明服务器知道它已错误或无法执行所请求的方法。

状态码 说明
500(Internal Server Error) 服务器遇到意外状况,无法满足用户请求
501(Not Implemented) 服务器不支持满足请求所需的功能
502(Bad Gateway) 服务器充当网关或代理时从目标服务器得到了无效的相应
503(Service Unavailable) 服务器当前由于暂时的过载或计划的维护而无法处理该请求
504(Gateway Timeout) 服务器充当网关或代理时无法从目标服务器获得相应
505(HTTP Version Not Supported) 服务器不支持或拒绝支持请求中的HTTP版本

请求头说明

注:此处内容尚未进行整理,仅仅只是暂存。

一般而言请求头内的数据有以下 Key

头部字段名 说明
Accept 客户端能够接收的内容类型
Accept-Encoding 浏览器可以支持的web服务器返回内容压缩编码类型
Connection 是否需要持久连接
Authorization 授权信息,常见的有 Basic 或 Bearer
Cache-Control 指定请求和响应遵循的缓存机制
Cookie Cookie(这个没啥好说的)
Content-Length 请求的内容长度
Content-Type 请求数据类型(MIME)
Host 指定请求的服务器的域名和端口号
User-Agent 发送的浏览器和系统信息

一般而言相应头内的数据有以下 Key

头部字段名 说明
Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求
Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负)
Last-Modified 请求资源的最后修改时间
Cache-Control 告诉所有的缓存机制是否可以缓存及哪种类型
Content-Length 数据长度
Content-Encoding 服务器支持的返回内容压缩编码类型
Content-Type 返回数据类型(MIME)
Date 原始服务器消息发出的时间
Expires 响应过期的日期和时间
Server web服务器软件名称

HTTP 请求相关的知识整理
https://wangqian0306.github.io/2020/http/
作者
WangQian
发布于
2020年6月19日
许可协议