Skip to content

HTTP

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是 Web 数据通信的基础,它定义了客户端和服务器之间请求和响应的标准。

HTTP 特点

  • 无状态 :每个请求都是独立的,服务器不会保留之前请求的信息
  • 可扩展 :通过 HTTP 标头可以轻松扩展功能
  • 客户端-服务器模式 :由客户端发起请求,服务器返回响应
  • 简单快速 :客户端向服务器发送请求时,只需传送请求方法和路径
  • 灵活 :允许传输任意类型的数据对象

HTTP 版本演进

HTTP/1.0

  • 最早在 1996 年发布
  • 每次请求都需要建立一个 TCP 连接
  • 支持有限的请求方法(GET、POST、HEAD)
  • 不支持持久连接

HTTP/1.1

  • 1997 年发布,目前应用最广泛的版本
  • 引入持久连接(Connection: keep-alive)
  • 增加了更多请求方法(PUT、DELETE、OPTIONS 等)
  • 支持管道化请求(pipelining)
  • 引入内容协商机制
  • 缓存控制机制更加完善

HTTP/2

  • 2015 年发布
  • 二进制分帧层,不再使用文本格式
  • 多路复用,允许同时通过单一 TCP 连接发送多个请求
  • 头部压缩,减少网络开销
  • 服务器推送,允许服务器主动向客户端推送资源

HTTP/3

  • 基于 QUIC 协议,使用 UDP 而非 TCP
  • 改进的拥塞控制和丢包恢复机制
  • 减少了连接建立的延迟
  • 更好的移动网络支持

HTTP 请求方法

方法描述是否包含请求体是否安全是否幂等
GET获取资源
POST提交数据
PUT上传或替换资源
DELETE删除资源可选
HEAD获取响应头
OPTIONS获取支持的方法
PATCH部分修改资源
CONNECT建立隧道连接
TRACE追踪请求路径

HTTP 状态码

1xx - 信息性状态码

  • 100 Continue :服务器已收到请求头,客户端应继续发送请求体
  • 101 Switching Protocols :服务器正在切换协议

2xx - 成功状态码

  • 200 OK :请求成功
  • 201 Created :已创建新资源
  • 204 No Content :请求成功但没有返回内容

3xx - 重定向状态码

  • 301 Moved Permanently :资源永久移动到新位置
  • 302 Found :资源临时移动到新位置
  • 304 Not Modified :资源未修改,可使用缓存

4xx - 客户端错误状态码

  • 400 Bad Request :请求语法错误
  • 401 Unauthorized :需要身份验证
  • 403 Forbidden :服务器拒绝请求
  • 404 Not Found :资源不存在
  • 405 Method Not Allowed :不允许使用该请求方法
  • 429 Too Many Requests :请求过于频繁

5xx - 服务器错误状态码

  • 500 Internal Server Error :服务器内部错误
  • 502 Bad Gateway :网关错误
  • 503 Service Unavailable :服务暂时不可用
  • 504 Gateway Timeout :网关超时

HTTP 头部字段

通用头部

  • Cache-Control :指定缓存机制
  • Connection :控制网络连接选项
  • Date :消息生成的日期和时间
  • Transfer-Encoding :指定传输编码方式

请求头部

  • Accept :指定客户端接受的内容类型
  • Accept-Encoding :指定可接受的内容编码
  • Authorization :包含身份验证信息
  • Host :指定请求的服务器域名和端口
  • User-Agent :客户端应用类型、操作系统、软件开发商等信息
  • Cookie :之前由服务器通过 Set-Cookie 发送的 Cookie 信息

响应头部

  • Access-Control-Allow-Origin :指定允许跨域的域名
  • ETag :资源的特定版本的标识符
  • Location :用于重定向的 URL
  • Set-Cookie :服务器发送的 Cookie
  • WWW-Authenticate :指定身份验证方案

实体头部

  • Content-Encoding :指定内容的编码方式
  • Content-Length :指定内容的长度
  • Content-Type :指定内容的类型
  • Expires :指定内容的过期时间
  • Last-Modified :指定内容的最后修改时间

HTTP 缓存机制

强缓存

  • Expires :指定资源过期的绝对时间
  • Cache-Control :更精确的缓存控制
    • max-age :指定资源有效期
    • no-cache :需要验证才能使用缓存
    • no-store :禁止缓存

协商缓存

  • Last-Modified/If-Modified-Since :基于资源修改时间的验证
  • ETag/If-None-Match :基于资源内容的验证

HTTPS

HTTPS(HTTP Secure)是 HTTP 协议的安全版本,它通过 SSL/TLS 协议进行加密通信。

HTTPS 的优势

  • 数据加密 :防止数据被窃听
  • 数据完整性 :防止数据被篡改
  • 身份认证 :确保与正确的服务器通信

HTTPS 的工作原理

  1. 握手阶段 :客户端与服务器建立安全连接
  2. 证书验证 :客户端验证服务器的数字证书
  3. 密钥交换 :安全地交换对称加密的密钥
  4. 加密通信 :使用对称加密进行后续通信

HTTP 安全

常见的 HTTP 安全问题

  • 跨站脚本攻击(XSS) :注入恶意脚本
  • 跨站请求伪造(CSRF) :伪造用户请求
  • 中间人攻击 :拦截并可能修改通信内容
  • 会话劫持 :窃取用户会话标识

安全最佳实践

  • 使用 HTTPS 加密通信
  • 实施内容安全策略(CSP)
  • 使用 HTTP 严格传输安全(HSTS)
  • 设置适当的 Cookie 属性(Secure, HttpOnly, SameSite)
  • 实施适当的身份验证和授权机制