一、HTTP协议概述

HTTP(HyperText Transfer Protocol)是应用层协议,用于客户端和服务器之间的通信。

特点:

  • 无状态协议
  • 基于请求-响应模型
  • 简单可扩展
  • 支持多种数据类型

二、HTTP版本

HTTP/1.0

  • 每次请求都建立新连接
  • 请求完成后断开连接

HTTP/1.1

  • 默认持久连接(Keep-Alive)
  • 支持管道化
  • 支持分块传输
  • 增加Host头

HTTP/2.0

  • 二进制分帧
  • 多路复用
  • 头部压缩
  • 服务端推送

HTTP/3.0

  • 基于QUIC协议
  • 使用UDP替代TCP
  • 减少连接建立延迟

三、HTTP请求

请求方法

方法 作用 幂等 安全
GET 获取资源
POST 创建资源
PUT 更新资源
DELETE 删除资源
PATCH 部分更新
HEAD 获取响应头
OPTIONS 获取支持的方法

请求报文结构

1
2
3
4
请求行:方法 URL 版本
请求头:头部字段: 值
空行
请求体

示例:

1
2
3
4
5
6
POST /api/user HTTP/1.1
Host: www.example.com
Content-Type: application/json
Authorization: Bearer token

{"name": "张三", "age": 20}

常用请求头

头部 作用
Host 服务器域名
Content-Type 请求体类型
Content-Length 请求体长度
Authorization 认证信息
Accept 可接受的响应类型
User-Agent 客户端信息
Cookie 客户端Cookie
Connection 连接管理
Cache-Control 缓存控制

四、HTTP响应

响应报文结构

1
2
3
4
状态行:版本 状态码 原因短语
响应头:头部字段: 值
空行
响应体

示例:

1
2
3
4
5
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 35

{"id": 1, "name": "张三"}

常用响应头

头部 作用
Content-Type 响应体类型
Content-Length 响应体长度
Set-Cookie 设置Cookie
Cache-Control 缓存控制
Location 重定向地址
Access-Control-Allow-Origin CORS

五、Content-Type

常见类型

类型 说明
application/json JSON数据
application/x-www-form-urlencoded 表单数据
multipart/form-data 文件上传
text/html HTML
text/plain 纯文本
application/xml XML数据

六、Cookie和Session

服务器通过Set-Cookie响应头设置,浏览器自动携带。

属性:

  • Domain:域名
  • Path:路径
  • Expires/Max-Age:过期时间
  • HttpOnly:禁止JS访问
  • Secure:仅HTTPS传输
  • SameSite:跨站策略

Session

服务器端存储的会话信息。

流程:

  1. 客户端首次请求
  2. 服务器创建Session,返回SessionID
  3. 客户端存储SessionID到Cookie
  4. 后续请求携带SessionID

Token

无状态认证方式。

流程:

  1. 客户端发送凭证
  2. 服务器验证后签发Token
  3. 客户端存储Token
  4. 后续请求在Authorization头携带Token

七、HTTPS

HTTPS = HTTP + SSL/TLS。

TLS握手过程

  1. 客户端发送支持的加密套件和随机数
  2. 服务器选择加密套件,返回证书和随机数
  3. 客户端验证证书,生成预主密钥
  4. 客户端用服务器公钥加密预主密钥发送
  5. 双方计算对称密钥
  6. 使用对称密钥加密通信

证书

  • 由CA机构签发
  • 包含公钥和持有者信息
  • 浏览器验证证书链

八、跨域(CORS)

同源策略

协议、域名、端口相同为同源。

CORS机制

简单请求:

  • 浏览器自动添加Origin头
  • 服务器返回Access-Control-Allow-Origin

预检请求:

  • 浏览器先发送OPTIONS请求
  • 服务器返回允许的方法和头部
  • 浏览器再发送实际请求
1
2
3
4
5
6
7
8
9
10
11
12
13
// SpringBoot配置CORS
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}

九、缓存机制

强缓存

不发送请求,直接使用缓存。

  • Cache-Control:max-age=3600
  • Expires:过期时间

协商缓存

发送请求验证资源是否更新。

  • Last-Modified / If-Modified-Since
  • ETag / If-None-Match

返回304表示资源未修改,使用缓存。

十、总结

HTTP协议要点:

  • 请求-响应模型
  • 多种请求方法和状态码
  • Cookie/Session/Token认证方式
  • HTTPS保证传输安全
  • CORS解决跨域问题
  • 缓存机制提升性能

HTTP是Web开发的基础,理解其原理有助于排查问题和优化性能。