必知的http常见请求方法和状态码,让你怼后端更有底气

355 阅读9分钟

由于被自己的项目搞的焦头烂额,无法开通腾讯广告主,头大......
就写篇http相关简单的文章吧,近几年面试已经很少被问到了,面试不被问到但并不代表不需要掌握,掌握了常见报错,也更有怼后端的勇气了,哈哈哈

HTTP(超文本传输协议)定义了多种请求方法,用于规定客户端与服务器之间的交互方式,同时也通过响应状态码反馈请求处理结果。每种方法都有明确的语义和使用场景,而状态码则直观体现了请求的成功与否或异常原因。理解它们的区别是进行Web开发和API设计的基础。

一、核心HTTP请求方法及特点

1. GET:获取资源

  • 作用:从服务器请求指定资源(如网页、图片、数据),是最常用的请求方法。
  • 特点
    • 请求参数会附加在URL后面(格式:url?key1=value1&key2=value2),可见性高。
    • 受URL长度限制(不同浏览器限制不同,通常不超过2048字符)。
    • 仅用于“获取”资源,不应有副作用(如修改数据),符合“幂等性”(多次请求结果一致)。
    • 无请求体,数据通过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的用户”。
    • 具有幂等性:多次提交相同数据,结果一致(最终都是替换为目标状态)。
    • 数据放在请求体中,支持复杂格式。
  • 与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指定资源。
  • 常见响应状态码
    • 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 OK404 Not Found
POST提交/创建资源请求体可能有201 Created400 Bad Request、409 Conflict
PUT完整替换资源请求体200 OK404 Not Found、400 Bad Request
DELETE删除资源URL路径204 No Content404 Not Found、403 Forbidden
PATCH部分更新资源可能是请求体200 OK404 Not Found、422 Unprocessable Entity
HEAD获取资源头部信息URL参数200 OK404 Not Found
OPTIONS获取服务器支持的方法-200 OK405 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通信的核心规则。开发中需注意:

  1. 按语义选择请求方法(如查询用GET,创建用POST);
  2. 按场景返回对应状态码(如创建成功用201,资源不存在用404);
  3. 理解幂等性和安全性,避免因方法误用导致的逻辑错误(如用GET提交表单可能泄露数据)。

掌握这些知识,能设计出更规范、易维护的API,也能更快定位通信中的问题(如看到405就知道是方法不支持,看到404就检查URL是否正确)。