HTTP
整理回顾http相关通识,方便日后查阅
方法
已幂等副作用划分请求方法
| HTTP 请求方法 | 幂等性 | 副作用(是否修改服务器状态) | 核心说明(场景 + 示例) |
|---|---|---|---|
| GET | 是 | 无(只读) | 查数据,不改任何状态。比如 GET /users/1(查用户 1 信息),执行 100 次也只返回数据,不影响服务器。 |
| HEAD | 是 | 无(只读) | 和 GET 功能一致,只返回响应头(不返回响应体),比如 HEAD /users/1 验证用户是否存在,无副作用。 |
| OPTIONS | 是 | 无(只读) | 询问服务器“该接口支持哪些请求方法”,比如 OPTIONS /api,仅获取信息,不修改状态。 |
| TRACE | 是 | 无(只读) | 用于调试,返回服务器收到的原始请求(回声),比如 TRACE /api,不产生任何修改。 |
| POST | 否 | 有(新增 / 触发动作) | 新增数据或触发非幂等动作。比如 POST /users(新增用户)、POST /pay(发起支付)—— 执行多次会创建多个用户 / 扣多次款,不幂等且有副作用。 |
| PUT | 是 | 有(全量修改) | 全量更新数据(按唯一标识覆盖)。比如 PUT /users/1(更新用户 1 信息)—— 执行 1 次和执行 10 次,最终用户 1 的信息都是最后一次请求的内容,效果一致(幂等),但会修改状态(有副作用)。 |
| PATCH | 否 | 有(部分修改) | 部分更新数据(只改需要的字段)。比如 PATCH /users/1(仅改用户 1 的手机号)—— 多次执行可能导致字段被重复修改(比如每次改手机号为不同值),不幂等,且有副作用。 |
| DELETE | 是 | 有(删除数据) | 删除指定资源。比如 DELETE /users/1(删除用户 1)—— 执行 1 次用户 1 被删除,执行 10 次还是删除状态(不会额外删除其他数据),效果一致(幂等),但会修改状态(有副作用)。 |
| DELETE(批量) | 否 | 有(批量删除) | 特殊场景:DELETE /users?ids=1,2(批量删除用户 1 和 2)—— 若第一次执行删除 1,第二次执行删除 2(因网络延迟导致两次请求),多次执行效果不同,不幂等。 |
状态
| 状态码 | 类别 | 含义 |
|---|---|---|
| 1XX | nformational(信息性状态码) | 接收的请求正在处理 |
| 2XX | uccess(成功状态码) | 请求正常处理完毕 |
| 3XX | edirection(重定向状态码) | 需要进行附加操作以完成请求 |
| 4XX | lient Error(客户端错误状态码) | 服务器无法处理请求 |
| 5XX | erver Error(服务器错误状态码) | 服务器处理请求出错 |
- 1XX 信息 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
- 2XX 成功 200 OK
-
204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
-
206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
- 3XX 重定向
-
301 Moved Permanently :永久性重定向
-
302 Found :临时性重定向
-
303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。
-
304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。
-
307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
- 4XX 客户端错误
-
400 Bad Request :请求报文中存在语法错误。
-
401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
-
403 Forbidden :请求被拒绝。
-
404 Not Found
- 5XX 服务器错误
-
500 Internal Server Error :服务器正在执行请求时发生错误。
-
503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。