GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: zh-CN
Connection: keep-alive
请求体(POST 等方法)
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Date: Mon, 15 Jan 2024 00:00:00 GMT
Server: nginx
响应体
| 方法 | 说明 | 幂等 | 安全 |
|---|
| GET | 获取资源 | ✓ | ✓ |
| POST | 创建资源 | ✗ | ✗ |
| PUT | 更新资源(全量) | ✓ | ✗ |
| PATCH | 更新资源(部分) | ✗ | ✗ |
| DELETE | 删除资源 | ✓ | ✗ |
| HEAD | 获取头部 | ✓ | ✓ |
| OPTIONS | 获取支持的方法 | ✓ | ✓ |
| 特性 | GET | POST |
|---|
| 参数位置 | URL | 请求体 |
| 长度限制 | 有(URL 长度限制) | 无 |
| 缓存 | 可缓存 | 不缓存 |
| 幂等性 | 幂等 | 非幂等 |
| 安全性 | 参数暴露在 URL | 相对安全 |
| 状态码 | 说明 |
|---|
| 100 | Continue |
| 101 | Switching Protocols |
| 状态码 | 说明 |
|---|
| 200 | OK |
| 201 | Created |
| 204 | No Content |
| 状态码 | 说明 |
|---|
| 301 | Moved Permanently(永久重定向) |
| 302 | Found(临时重定向) |
| 304 | Not Modified(缓存) |
| 307 | Temporary Redirect |
| 状态码 | 说明 |
|---|
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 405 | Method Not Allowed |
| 状态码 | 说明 |
|---|
| 500 | Internal Server Error |
| 502 | Bad Gateway |
| 503 | Service Unavailable |
| 504 | Gateway Timeout |
不发请求,直接使用缓存。
# HTTP/1.0
Expires: Mon, 15 Jan 2024 00:00:00 GMT
# HTTP/1.1(优先级更高)
Cache-Control: max-age=3600
| 指令 | 说明 |
|---|
| max-age | 缓存有效期(秒) |
| no-cache | 使用缓存前需验证 |
| no-store | 不缓存 |
| public | 可被任何缓存 |
| private | 只能被浏览器缓存 |
发请求验证缓存是否有效。
# 基于修改时间
Last-Modified: Mon, 15 Jan 2024 00:00:00 GMT
If-Modified-Since: Mon, 15 Jan 2024 00:00:00 GMT
# 基于内容哈希(优先级更高)
ETag: "abc123"
If-None-Match: "abc123"
- 队头阻塞:一个请求阻塞后续请求
- 头部冗余:每次请求都发送完整头部
- 无法服务器推送
| 特性 | 说明 |
|---|
| 二进制分帧 | 将数据分割为帧传输 |
| 多路复用 | 一个连接并行多个请求 |
| 头部压缩 | HPACK 算法压缩头部 |
| 服务器推送 | 主动推送资源 |
| 流优先级 | 设置请求优先级 |
基于 QUIC 协议(UDP),解决 TCP 队头阻塞。
- 验证证书是否过期
- 验证证书是否被吊销
- 验证证书颁发机构
- 验证域名是否匹配
| 特性 | 对称加密 | 非对称加密 |
|---|
| 密钥 | 相同 | 公钥+私钥 |
| 速度 | 快 | 慢 |
| 用途 | 数据加密 | 密钥交换、签名 |
| 算法 | AES、DES | RSA、ECC |
HTTPS 使用非对称加密交换密钥,然后使用对称加密传输数据。
存储在客户端的小数据。
Set-Cookie: name=value; Path=/; Domain=.example.com; Expires=...; HttpOnly; Secure; SameSite=Strict
| 属性 | 说明 |
|---|
| HttpOnly | 禁止 JavaScript 访问 |
| Secure | 只在 HTTPS 传输 |
| SameSite | 防止 CSRF |
存储在服务端的会话数据。
客户端 Cookie: JSESSIONID=abc123
服务端 Session: {userId: 1, username: "张三"}
| 特性 | Cookie | Session |
|---|
| 存储位置 | 客户端 | 服务端 |
| 安全性 | 较低 | 较高 |
| 大小限制 | 4KB | 无限制 |
| 跨域 | 受限 | 不受限 |
协议、域名、端口都相同才是同源。
# 简单请求
Access-Control-Allow-Origin: *
# 预检请求
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 86400
- JSONP(只支持 GET)
- 代理服务器
- WebSocket