返回文章列表
帮助中心

什么是HTTP?HTTP的请求方法与状态码

陶艺
2025-11-27
6天前
什么是HTTP?HTTP的请求方法与状态码

HTTP 是互联网世界中最基础、最关键的通信协议之一,它定义了浏览器与服务器之间如何交换数据,是网页加载、图片展示、视频播放、接口通信等一切网络行为的核心规则。可以说,没有 HTTP,就没有我们今天熟悉的互联网体验:从打开一个网页、查看天气、刷社交媒体,到在线购物、移动支付,所有的内容都是通过 HTTP 在全球范围内被可靠、高效地传递。

它像互联网的“通用语言”和“运输系统”,让无数不同的设备、系统和服务能够协同工作、无缝连接,使互联网得以形成庞大且互联的生态。HTTP 的发展(从 1.0 到 3.0)也不断推动网络速度、安全性和稳定性的提升,成为现代数字世界运行不可或缺的基础设施。

基础概念

什么是 HTTP

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(如 HTML)的应用层协议。它是万维网(World Wide Web)数据通信的基础。

核心特点

  • • 简单:HTTP 消息易于阅读和理解
  • • 可扩展:通过 Header 可以轻松扩展功能
  • • 无状态:每个请求都是独立的
  • • 基于 TCP/IP:在可靠的传输层之上工作

历史发展

1991 年:HTTP/0.9 诞生,只支持 GET 方法1996 年:HTTP/1.0 发布,增加了 Header 和状态码1997 年:HTTP/1.1 发布,支持持久连接2015 年:HTTP/2 发布,引入二进制分帧2022 年:HTTP/3 标准化,基于 QUIC 协议

HTTP 的工作原理

HTTP 遵循经典的客户端-服务器模型:

客户端(浏览器)                     服务器    |                                   |    |------ HTTP 请求 ----------------->|    |                                   | 处理请求    |                                   | 查找资源    |<----- HTTP 响应 -------------------|    |                                   |    显示内容                              

完整的通信流程

  1. 1. 客户端发起 DNS 查询,获取服务器 IP
  2. 2. 建立 TCP 连接(三次握手)
  3. 3. 客户端发送 HTTP 请求
  4. 4. 服务器处理请求并返回 HTTP 响应
  5. 5. 客户端接收响应并渲染内容
  6. 6. 关闭 TCP 连接(四次挥手)或保持连接(Keep-Alive)

HTTP 消息结构

HTTP 请求结构

GET /index.html HTTP/1.1              ← 请求行Host: www.example.com                 ← Header 部分User-Agent: Mozilla/5.0Accept: text/htmlConnection: keep-alive                                      ← 空行(分隔符)请求体(可选)                          ← Body 部分

HTTP 响应结构

HTTP/1.1 200 OK                       ← 状态行Content-Type: text/html               ← Header 部分Content-Length: 1234Date: Mon, 20 Nov 2024 12:00:00 GMT                                      ← 空行(分隔符)<html>                                ← Body 部分  <body>Hello World</body></html>

HTTP 的特性

1. 无状态性

HTTP 本身不会保留之前的请求和响应信息。每个请求都是独立的。

优点:

  • • 服务器不需要保存状态信息
  • • 减轻服务器负担
  • • 易于扩展

缺点:

  • • 需要额外机制(Cookie、Session)来维持状态
  • • 每次请求都需要传输完整的信息

2. 持久连接(HTTP/1.1+)

在 HTTP/1.1 中引入了持久连接(Persistent Connection),也称为 Keep-Alive。

传统方式(HTTP/1.0):请求 1 → 响应 1 → 关闭连接请求 2 → 响应 2 → 关闭连接(每次请求都要建立新连接)持久连接(HTTP/1.1):请求 1 → 响应 1请求 2 → 响应 2请求 3 → 响应 3(一个连接可以发送多个请求)

3. 管道化(Pipelining)

HTTP/1.1 支持管道化,允许在同一个连接上同时发送多个请求,无需等待响应。

客户端:请求 1 → 请求 2 → 请求 3服务器:      ← 响应 1 ← 响应 2 ← 响应 3(按顺序返回响应)

4. 可扩展性

通过自定义 Header 可以轻松扩展 HTTP 功能。

X-Custom-Header: custom-valueX-Request-ID: 12345X-API-Version: v2


HTTP 请求方法

常用方法详解

GET

获取资源,最常用的方法。

GET /api/users/123 HTTP/1.1Host: example.com

特点:

  • • 参数在 URL 中(查询字符串)
  • • 可以被缓存
  • • 可以被收藏为书签
  • • 长度有限制(浏览器和服务器限制)
  • • 幂等操作(多次请求结果相同)

POST

提交数据到服务器,常用于创建资源。

POST /api/users HTTP/1.1Host: example.comContent-Type: application/json{  "name": "John",  "email": "john@example.com"}

特点:

  • • 参数在请求体中
  • • 不会被缓存
  • • 不能被收藏为书签
  • • 长度理论上无限制
  • • 非幂等操作(多次请求可能产生不同结果)

PUT

更新资源,用整个资源替换。

PUT /api/users/123 HTTP/1.1Host: example.comContent-Type: application/json{  "name": "John Updated",  "email": "john.new@example.com",  "age": 30}

特点:

  • • 幂等操作
  • • 通常用于完整更新资源
  • • 如果资源不存在,可以创建

PATCH

部分更新资源。

PATCH /api/users/123 HTTP/1.1Host: example.comContent-Type: application/json{  "email": "john.new@example.com"}

特点:

  • • 只更新指定的字段
  • • 节省带宽
  • • 非幂等操作

DELETE

删除资源。

DELETE /api/users/123 HTTP/1.1Host: example.com

特点:

  • • 幂等操作
  • • 删除指定资源

HEAD

与 GET 类似,但只返回 Header,不返回 Body。

HEAD /api/users/123 HTTP/1.1Host: example.com

用途:

  • • 检查资源是否存在
  • • 获取资源的元信息(大小、修改时间)
  • • 检查链接有效性

OPTIONS

查询服务器支持的方法。

OPTIONS /api/users HTTP/1.1Host: example.com

响应:

HTTP/1.1 200 OKAllow: GET, POST, PUT, DELETE, OPTIONSAccess-Control-Allow-Methods: GET, POST, PUT, DELETE

用途:

  • • CORS 预检请求
  • • 查询服务器能力

CONNECT

建立隧道连接,用于 HTTPS 代理。

CONNECT www.example.com:443 HTTP/1.1Host: www.example.com

TRACE

回显服务器收到的请求,用于诊断。

TRACE /api/test HTTP/1.1Host: example.com

注意:由于安全问题,TRACE 通常被禁用。

各方法对比


方法幂等安全可缓存请求体响应体主要用途
GET获取资源
POST创建资源
PUT完整更新
PATCH部分更新
DELETE删除资源
HEAD获取元信息
OPTIONS查询能力

幂等性:多次执行产生相同的结果安全性:不会修改资源状态

RESTful API 设计

REST(Representational State Transfer)是一种架构风格,用于构建网络服务,它利用 HTTP 协议作为底层通信机制,并在此基础上定义了特定的设计原则和约束条件。RESTful API 使用 HTTP 方法来执行操作,但它不仅仅是对 HTTP 方法命名的引用,而是通过遵循一些基本的设计原则(如资源的表现、无状态、统一接口等)来规范 API 的结构和行为。

使用 HTTP 方法设计 RESTful API:

资源:用户(users)GET    /users          # 获取用户列表GET    /users/123      # 获取特定用户POST   /users          # 创建新用户PUT    /users/123      # 完整更新用户PATCH  /users/123      # 部分更新用户DELETE /users/123      # 删除用户资源:用户的订单(users/123/orders)GET    /users/123/orders       # 获取用户的订单列表GET    /users/123/orders/456   # 获取特定订单POST   /users/123/orders       # 为用户创建订单DELETE /users/123/orders/456   # 删除特定订单


HTTP 状态码

状态码分类

状态码由 3 位数字组成,第一位定义了响应的类别:

1xx:信息性状态码(Informational)2xx:成功状态码(Success)3xx:重定向状态码(Redirection)4xx:客户端错误状态码(Client Error)5xx:服务器错误状态码(Server Error)

常用状态码详解

1xx 信息性状态码

100 Continue

客户端应继续其请求通常用于客户端发送 Expect: 100-continue

101 Switching Protocols

服务器正在切换协议常见于 WebSocket 升级

示例:

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: Upgrade

2xx 成功状态码

200 OK

请求成功最常见的状态码

201 Created

资源已创建常用于 POST 请求成功后

示例:

HTTP/1.1 201 CreatedLocation: /api/users/124Content-Type: application/json{  "id": 124,  "name": "John"}

204 No Content

请求成功,但没有返回内容常用于 DELETE 请求

206 Partial Content

部分内容用于断点续传

示例:

HTTP/1.1 206 Partial ContentContent-Range: bytes 0-1023/5000Content-Length: 1024

3xx 重定向状态码

301 Moved Permanently

永久重定向搜索引擎会更新索引

示例:

HTTP/1.1 301 Moved PermanentlyLocation: https://www.example.com/new-page

302 Found

临时重定向搜索引擎不会更新索引

304 Not Modified

资源未修改可以使用缓存版本

示例:

请求:GET /image.jpg HTTP/1.1If-Modified-Since: Mon, 01 Jan 2024 00:00:00 GMT响应:HTTP/1.1 304 Not Modified

307 Temporary Redirect

临时重定向保持请求方法不变

308 Permanent Redirect

永久重定向保持请求方法不变

4xx 客户端错误状态码

400 Bad Request

请求语法错误服务器无法理解请求

401 Unauthorized

未授权需要身份认证

示例:

HTTP/1.1 401 UnauthorizedWWW-Authenticate: Bearer realm="example"

403 Forbidden

禁止访问服务器拒绝请求

404 Not Found

资源不存在最常见的错误状态码

405 Method Not Allowed

方法不允许例如对只读资源使用 POST

示例:

HTTP/1.1 405 Method Not AllowedAllow: GET, HEAD

408 Request Timeout

请求超时服务器等待请求超时

409 Conflict

请求冲突例如版本冲突

410 Gone

资源已永久删除比 404 更明确

413 Payload Too Large

请求体过大超过服务器限制

414 URI Too Long

URI 过长通常是 GET 请求 URL 太长

415 Unsupported Media Type

不支持的媒体类型例如发送 XML 但服务器只接受 JSON

429 Too Many Requests

请求过多触发限流

示例:

HTTP/1.1 429 Too Many RequestsRetry-After: 3600X-RateLimit-Limit: 1000X-RateLimit-Remaining: 0

5xx 服务器错误状态码

500 Internal Server Error

服务器内部错误通用错误响应

501 Not Implemented

功能未实现服务器不支持该请求方法

502 Bad Gateway

网关错误代理服务器从上游服务器收到无效响应

503 Service Unavailable

服务不可用服务器暂时无法处理请求

示例:

HTTP/1.1 503 Service UnavailableRetry-After: 120

504 Gateway Timeout

网关超时代理服务器等待上游服务器响应超时

状态码最佳实践

选择合适的状态码

// 成功创建资源return res.status(201).json({ id: newUser.id });// 成功删除,无返回内容return res.status(204).send();// 资源不存在return res.status(404).json({ error: "User not found" });// 验证失败return res.status(400).json({ error: "Invalid email format" });// 未授权return res.status(401).json({ error: "Authentication required" });// 权限不足return res.status(403).json({ error: "Insufficient permissions" });// 服务器错误return res.status(500).json({ error: "Internal server error" });


本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议