详解 HTTP

HTTP ,全称为 HyperText Transfer Protocol (超文本传输协议),是基于请求-响应模型的无状态协议。

它定义了客户端和服务端之间通信的规则,被广泛应用于浏览网页,接口调用,数据传输和下载。

通信过程如下:

  • 客户端发起请求。
  • 服务器接收请求。
  • 服务器处理请求后返回响应。
  • 客户端接收响应。

请求和响应

以下是一个常见的请求体和对应的响应体。

POST /api/user HTTP/2
Host: api.example.com
User-Agent: Chrome/137.0.0.0
Accept: */*
Content-Type: application/json
Content-Length: 100
Authorization: Bearer xxx.xxx.xxx

{
  "username": "xxx",
  "password": "xxxxxxxx",
  "channel": 23
}
HTTP/2 200 OK
Content-Type: application/json
Content-Length: 123

{
  "status": "success",
  "message": "User authenticated",
  "user": {
    "id": 1024,
    "username": "xxx",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

请求体通常由三个部分组成:

  • 请求行,用来标注请求方法,路径,协议版本。

    POST /api/user HTTP/2
    
  • 请求头,标注这个请求携带的元数据。如请求主机,认证 token 等。

    Host: api.example.com
    User-Agent: Chrome/137.0.0.0
    Accept: */*
    Content-Type: application/json
    Content-Length: 100
    Authorization: Bearer xxx.xxx.xxx
    
  • 请求体,为这个请求携带参数,需要和请求体之间间隔一行空行。

    
    {
      "username": "xxx",
      "password": "xxxxxxxx",
      "channel": 23
    }
    

响应体则和请求体类似,分为三个部分组成:

  • 状态行,标注请求响应状态。

    HTTP/2 200 OK
    
  • 响应头,标注响应携带的元数据,如返回 json 格式,内容长度 123。

    Content-Type: application/json
    Content-Length: 123
    
  • 响应体,为这个响应添加数据。和请求体一样,需要空一行。

    
    {
      "status": "success",
      "message": "User authenticated",
      "user": {
        "id": 1024,
        "username": "xxx",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
      }
    }
    
    

HTTP 请求

HTTP 是客户端与服务器之间进行通信的协议,它定义了请求的方式以及响应的格式。

让客户端通过不同的请求方法告知服务器希望执行的操作。常见的 HTTP 请求方法如下:

方法 说明
GET 获取资源(无请求体)
POST 提交数据(有请求体)
PUT 更新整个资源
PATCH 局部更新资源
DELETE 删除资源

服务器在处理完请求后,会返回一个状态码用于说明本次请求的处理结果。

状态码被分类如下:

  • 1xx:信息类(如 100 Continue)
  • 2xx:成功类
  • 3xx:重定向类(如 301、302、304)
  • 4xx:客户端错误
  • 5xx:服务器错误

常见的状态码如下:

状态码 含义
200 OK,请求成功
201 Created,资源已创建
400 Bad Request,请求参数错误
401 Unauthorized,未授权
403 Forbidden,无权限访问
404 Not Found,资源不存在
500 Internal Server Error

无状态

HTTP 是一种无状态协议,这意味着每次请求都是独立的,服务器不会自动保留先前请求的上下文。

为了在实际应用中维持用户登录状态或操作连续性,必须通过额外机制来标识用户身份和会话状态。常见的几种方式如下:

  • Cookie:由服务器写入客户端浏览器,客户端在后续请求中会自动携带该 Cookie,服务器可据此识别用户。

  • Session:服务器在本地维护的会话状态,通常依赖于客户端提供的 Session ID(通常通过 Cookie 传递)来关联。

  • Token(令牌):服务器在用户认证成功后颁发的认证信息,客户端需要在每次请求中主动携带该令牌(通常通过 Authorization 头),以访问受保护的资源。

这些机制共同弥补了 HTTP 协议无状态的天然限制,使得用户认证、会话管理等功能得以实现。

HTTP 协议版本

HTTP 协议经历了多个版本的演进:

版本 特点说明
HTTP/1.1 默认持久连接,支持管道化请求,但仍是串行传输
HTTP/2 二进制格式,多路复用,首部压缩,显著提升性能
HTTP/3 基于 QUIC 协议,进一步提升连接速度与可靠性

目前主流浏览器和服务端已广泛支持 HTTP/2 和 HTTP/3。

安全性相关

  • HTTPS:通过 TLS/SSL 加密通信,防止中间人攻击与数据泄露。但是需要注意,因为是加密通信,需要进行解密,因此 HTTPS 的性能会相较于 HTTP 稍低。不过相较于带来的安全性,这些开销是可以接受的。

  • CORS(跨域资源共享):浏览器的安全策略限制跨域请求,服务端需设置响应头如:

    Access-Control-Allow-Origin: *
    
  • CSRF / XSS 防护:常见 Web 安全风险,可通过令牌、白名单、编码等手段防范。


详解 HTTP
http://www.inksha.com/archives/xiang-jie-http
作者
inksha
发布于
2025年06月05日
许可协议