由于被自己的项目搞的焦头烂额,无法开通腾讯广告主,头大......
就写篇http相关简单的文章吧,近几年面试已经很少被问到了,面试不被问到但并不代表不需要掌握,掌握了常见报错,也更有怼后端的勇气了,哈哈哈
HTTP(超文本传输协议)定义了多种请求方法,用于规定客户端与服务器之间的交互方式,同时也通过响应状态码反馈请求处理结果。每种方法都有明确的语义和使用场景,而状态码则直观体现了请求的成功与否或异常原因。理解它们的区别是进行Web开发和API设计的基础。
一、核心HTTP请求方法及特点
1. GET:获取资源
- 作用:从服务器请求指定资源(如网页、图片、数据),是最常用的请求方法。
- 特点 :
- 请求参数会附加在URL后面(格式:
url?key1=value1&key2=value2
),可见性高。 - 受URL长度限制(不同浏览器限制不同,通常不超过2048字符)。
- 仅用于"获取"资源,不应有副作用(如修改数据),符合"幂等性"(多次请求结果一致)。
- 无请求体,数据通过URL传递。
- 请求参数会附加在URL后面(格式:
- 常见响应状态码 :
- 200 OK:请求成功,服务器返回指定资源。
- 404 Not Found:请求的资源不存在(如URL错误)。
- 304 Not Modified:资源未修改(客户端可使用缓存)。
- 示例 :浏览器访问
https://example.com/news?id=123
,获取ID为123的新闻,成功时返回200状态码。
2. POST:提交资源
- 作用:向服务器提交数据,通常用于创建新资源或触发复杂操作(如表单提交、注册用户)。
- 特点 :
- 请求参数放在请求体中(而非URL),安全性更高(非明文显示)。
- 无数据长度限制(由服务器配置决定)。
- 可能产生副作用(如创建订单、扣减库存),不保证幂等性(多次提交可能重复创建)。
- 支持多种数据格式(表单、JSON、文件等)。
- 常见响应状态码 :
- 201 Created:资源创建成功(如用户注册成功)。
- 400 Bad Request:请求数据错误(如表单字段缺失)。
- 409 Conflict:请求冲突(如注册邮箱已存在)。
- 示例 :用户提交注册表单,数据通过POST发送到
https://example.com/register
,成功时返回201状态码。
3. PUT:更新资源
- 作用 :向服务器发送数据,用于完整替换指定资源(如更新用户全部信息)。
- 特点 :
- 需要明确指定目标资源的URL(如
/users/123
),表示"替换ID为123的用户"。 - 具有幂等性:多次提交相同数据,结果一致(最终都是替换为目标状态)。
- 数据放在请求体中,支持复杂格式。
- 需要明确指定目标资源的URL(如
- 与POST的区别:PUT强调"替换"(全量更新),且幂等;POST强调"创建"或"触发操作",可能非幂等。
- 常见响应状态码 :
- 200 OK:资源更新成功。
- 404 Not Found:目标资源不存在(如要更新的用户ID不存在)。
- 400 Bad Request:提交的数据格式错误。
- 示例 :通过PUT请求
https://example.com/users/123
,发送完整用户信息替换ID为123的用户数据,成功时返回200。
4. DELETE:删除资源
- 作用:请求服务器删除指定资源。
- 特点 :
- 需要明确指定资源URL(如
/products/456
),表示"删除ID为456的商品"。 - 具有幂等性:多次删除同一资源,结果一致(第一次删除后,后续请求仍返回"已删除"状态)。
- 通常无请求体,通过URL指定资源。
- 需要明确指定资源URL(如
- 常见响应状态码 :
- 204 No Content:删除成功(无返回内容)。
- 404 Not Found:要删除的资源不存在。
- 403 Forbidden:无权限删除(如普通用户删除管理员账号)。
- 示例 :调用
DELETE /orders/789
删除ID为789的订单,成功时返回204。
5. PATCH:部分更新资源
- 作用 :向服务器发送数据,用于部分更新资源(仅修改需要变更的字段)。
- 特点 :
- 与PUT的核心区别:PUT是"全量替换",PATCH是"增量修改"(如只更新用户的手机号,其他信息不变)。
- 幂等性:若操作是"修改指定字段为固定值",则幂等;若涉及"累加数值"(如"增加10积分"),则非幂等。
- 数据放在请求体中,通常用JSON指定修改内容(如
{"phone": "13800138000"}
)。
- 常见响应状态码 :
- 200 OK:部分更新成功。
- 404 Not Found:目标资源不存在。
- 422 Unprocessable Entity:请求数据格式正确,但逻辑错误(如修改手机号为无效格式)。
- 示例 :通过PATCH请求
https://example.com/users/123
,仅更新用户的手机号,成功时返回200。
6. HEAD:获取资源头部信息
- 作用:与GET类似,但仅返回响应头(不包含响应体)。
- 特点 :
- 用于获取资源的元数据(如文件大小、最后修改时间、是否存在)。
- 无请求体,参数通过URL传递,与GET规则一致。
- 不返回资源内容,节省带宽。
- 常见响应状态码 :
- 200 OK:资源存在,响应头包含元数据。
- 404 Not Found:资源不存在。
- 示例 :通过
HEAD /images/logo.png
检查图片是否存在,存在时返回200,响应头包含Content-Length
(文件大小)。
7. OPTIONS:获取服务器支持的方法
- 作用:请求服务器返回"目标资源支持的HTTP方法"或"跨域资源共享(CORS)信息"。
- 特点 :
- 常用于跨域请求前的"预检请求"(浏览器自动发送),确认服务器是否允许跨域操作。
- 响应头中
Allow
字段会列出支持的方法(如Allow: GET, POST, PUT
)。
- 常见响应状态码 :
- 200 OK:请求成功,返回支持的方法或CORS信息。
- 405 Method Not Allowed:服务器不支持该OPTIONS请求(罕见)。
- 示例 :前端跨域调用API时,浏览器先发送OPTIONS请求到
https://api.example.com
,确认是否允许访问,成功时返回200。
二、HTTP响应状态码分类及核心含义
HTTP状态码由3位数字组成,第一位数字表示类别,共分为5类:
1. 1xx(信息类):请求已接收,继续处理
- 100 Continue:服务器已接收请求头,客户端可继续发送请求体(常用于大文件上传)。
- 特点:临时响应,不常用,主要用于协议层面的中间状态。
2. 2xx(成功类):请求已成功处理
- 200 OK:请求成功(最常用,适用于GET、PUT、PATCH等)。
- 201 Created:资源创建成功(仅用于POST创建资源)。
- 204 No Content:请求成功,但无返回内容(适用于DELETE)。
- 206 Partial Content:部分请求成功(如断点续传时,返回部分文件)。
3. 3xx(重定向类):需要进一步操作完成请求
- 301 Moved Permanently:资源永久迁移到新URL(如旧域名跳转新域名)。
- 302 Found:资源临时迁移到新URL(如临时维护跳转)。
- 304 Not Modified:资源未修改,客户端可使用缓存(配合GET使用)。
- 307 Temporary Redirect:临时重定向,保持原请求方法(如POST请求重定向时仍用POST)。
4. 4xx(客户端错误):请求存在错误,服务器无法处理
- 400 Bad Request:请求参数错误(如格式错误、缺少必要字段)。
- 401 Unauthorized:需要身份验证(如未登录访问需登录的接口)。
- 403 Forbidden:已认证,但无权限访问(如普通用户访问管理员接口)。
- 404 Not Found:请求的资源不存在(URL错误或资源已删除)。
- 405 Method Not Allowed:请求方法不被支持(如用POST访问仅允许GET的接口)。
- 409 Conflict:请求冲突(如创建的资源已存在)。
- 422 Unprocessable Entity:请求格式正确,但数据逻辑错误(如手机号格式无效)。
5. 5xx(服务器错误):服务器处理请求时发生错误
- 500 Internal Server Error:服务器内部错误(如代码bug、数据库崩溃)。
- 502 Bad Gateway:网关错误(如服务器作为代理时,上游服务器无响应)。
- 503 Service Unavailable:服务器暂时不可用(如维护中、负载过高)。
- 504 Gateway Timeout:网关超时(上游服务器未在规定时间内响应)。
三、关键区别对比表
方法 | 核心作用 | 幂等性 | 数据位置 | 副作用 | 典型成功状态码 | 典型错误状态码 |
---|---|---|---|---|---|---|
GET | 获取资源 | 是 | URL参数 | 无 | 200 OK | 404 Not Found |
POST | 提交/创建资源 | 否 | 请求体 | 可能有 | 201 Created | 400 Bad Request、409 Conflict |
PUT | 完整替换资源 | 是 | 请求体 | 有 | 200 OK | 404 Not Found、400 Bad Request |
DELETE | 删除资源 | 是 | URL路径 | 有 | 204 No Content | 404 Not Found、403 Forbidden |
PATCH | 部分更新资源 | 可能是 | 请求体 | 有 | 200 OK | 404 Not Found、422 Unprocessable Entity |
HEAD | 获取资源头部信息 | 是 | URL参数 | 无 | 200 OK | 404 Not Found |
OPTIONS | 获取服务器支持的方法 | 是 | - | 无 | 200 OK | 405 Method Not Allowed |
四、延伸:幂等性、安全性与状态码的关联
- 幂等性:指多次执行相同请求,结果与一次执行一致。GET、PUT、DELETE、HEAD、OPTIONS是幂等的;POST和部分PATCH操作(如累加数值)是非幂等的。状态码中,幂等方法的错误码更多与"资源是否存在"(404)或"参数格式"(400)相关。
- 安全性:指请求不会修改服务器数据(无副作用)。GET、HEAD、OPTIONS是安全的;POST、PUT、DELETE、PATCH是不安全的。安全方法的状态码极少出现"资源创建/修改"相关的201,更多是200或404。
- 状态码与方法匹配:例如201仅用于POST创建资源,204常用于DELETE,304配合GET缓存,这是约定俗成的规范,能让接口更易理解。
五、总结
HTTP请求方法定义了客户端与服务器的交互方式,而状态码则反馈了交互结果------两者结合构成了Web通信的核心规则。开发中需注意:
- 按语义选择请求方法(如查询用GET,创建用POST);
- 按场景返回对应状态码(如创建成功用201,资源不存在用404);
- 理解幂等性和安全性,避免因方法误用导致的逻辑错误(如用GET提交表单可能泄露数据)。
掌握这些知识,能设计出更规范、易维护的API,也能更快定位通信中的问题(如看到405就知道是方法不支持,看到404就检查URL是否正确)。