HTTP-常用方法与状态码全解析

22 阅读4分钟

前言

在 Web 开发中,HTTP 协议规定了客户端与服务器交互的“动作”和“回应”。掌握不同的请求方法及其对应的状态码,是前端开发者定位问题、优化性能的基础。

一、 HTTP 的八大“动作” (Methods)

HTTP 定义了一组请求方法,用于指定对目标资源执行的操作:

  • GET:获取资源。多次请求结果相同,不应产生副作用。
  • POST:提交数据。通常用于创建新资源或提交表单。
  • PUT:更新资源。与 POST 的区别在于:PUT 指定了资源在服务器上的精确位置。
  • DELETE:删除指定资源。
  • HEAD:类似于 GET,但服务器只返回头部(Headers),不返回实体内容。常用于检查链接有效性或资源更新时间。
  • OPTIONS:查询服务器支持的方法。它是跨域(CORS)非简单请求(如 PUT/DELETE)预检的关键。如果请求成功,会有⼀个 Allow 的头,包含类似 GET,POST这样的信息,当我们在进行cors跨域时,如果是非简单请求(put或者delete)会先发送一个options方法来做一个请求预检验
  • TRACE:回显服务器收到的请求,主要用于诊断。
  • CONNECT:建立隧道,常用于 HTTPS(SSL)代理。

二、 深度对比:GET vs POST

这不仅是参数位置的区别,更涉及缓存、性能与协议底层的差异。

维度GETPOST
参数位置拼接在 URL 之后放置在 Request Body(请求体)中
数据长度受浏览器/服务器 URL 长度限制(约 2~4KB)原则上无限制(受服务器配置影响)
安全性参数暴露在 URL,安全性低相对较安全(但仍需 HTTPS 保护)
请求结果多次请求结果一致多次请求可能创建多个资源
缓存性可被浏览器主动缓存默认不缓存
数据包1 个 TCP 包:Header 和 Data 一起发送2 个 TCP 包:先发 Header 得到 100 Continue,再发 Data(注:部分浏览器/库会优化为 1 个包)

三、 HTTP 状态码:服务器的“表情包”

状态码通过三位数字告诉浏览器发生了什么。

1xx:信息提示(正在处理)

  • 100 Continue:服务器已收到 Header,客户端可继续发送 Body 数据。⼀般在发送 post 请求时,已发送了 http header 之后服务端将返回此信息,表示确认,之后客户端再发送具体参数信息

2xx:成功

  • 200 OK:请求处理成功。
  • 201 Created:请求成功且服务器创建了新资源。

3xx:重定向(换个地方找)

  • 301 Moved Permanently:永久重定向。请求的⽹⻚已永久移动到新位置,新的url在响应报文中的响应头的location中给出,get、head请求时浏览器会自动地访问新的url。
  • 302 Found:临时重定向。
  • 303 See Other :类似于301,不同之处在于,如果原来的请求是post,它会重定向到get请求的情况。
  • 304 Not Modified协商缓存命中。服务器告诉浏览器:资源没变,直接用本地缓存吧。

4xx:客户端错误(你找错人了)

  • 400 Bad Request:请求报文语法有误。
  • 401 Unauthorized:未授权,需要身份验证。
  • 403 Forbidden:服务器理解请求但拒绝执行(没权限)。
  • 404 Not Found:资源不存在。

5xx:服务器错误(我出故障了)

  • 500 Internal Server Error:服务器内部报错。
  • 503 Service Unavailable:服务器超载或停机维护。

四、 技术细节补充

  1. POST 数据包争议:前面写到POST 会产生两个 TCP 包。但这并非所有情况,Firefox 确实会发两次,但 Chrome 等浏览器在网络环境良好时可能会合并发送。此外,这取决于具体的网络库实现。
  2. 303 See Other:它的特殊之处在于,无论原请求是 POST 还是其他,重定向后的请求都会变成 GET
  3. GET 安全性:所谓POST 比 GET 安全是一个误区。在明文 HTTP 下,两者都能被截获;在 HTTPS 下,两者都是加密的。POST 的优势在于参数不留在浏览器历史记录和服务器日志中。