Skip to content

HTTP 协议

BeginnerWeb Fundamentals

HTTP(HyperText Transfer Protocol)是浏览器与服务器之间通信的 应用层协议,是 Web 运作的基石。


一、📡 请求/响应模型

HTTP 采用 请求-响应(Request-Response) 模式:客户端发送请求,服务器返回响应。

客户端(浏览器)                         服务器
     │                                    │
     │──── HTTP Request ────────────────►│
     │     (GET /index.html)              │
     │                                    │
     │◄──── HTTP Response ──────────────│
     │      (200 OK + HTML 文件)          │
     │                                    │

1.1 HTTP 请求结构

一个 HTTP 请求由三部分组成:

http
GET /api/users HTTP/1.1          ← 请求行(方法 + 路径 + 协议版本)
Host: example.com                ← 请求头(Headers)
Accept: text/html
User-Agent: Chrome/120

                                 ← 请求体(Body,仅 POST/PUT 等有)
部分说明
请求行方法(GET)、资源路径(/api/users)、HTTP 版本
请求头附加信息(主机名、接受的内容类型、浏览器标识等)
请求体发送给服务器的数据(如表单内容、JSON),GET 请求通常没有

1.2 HTTP 响应结构

http
HTTP/1.1 200 OK                  ← 状态行(协议版本 + 状态码 + 描述)
Content-Type: text/html          ← 响应头(Headers)
Content-Length: 3456

<!DOCTYPE html>                  ← 响应体(Body,即返回的内容)
<html>...</html>

二、📮 HTTP 方法(Methods)

HTTP 方法定义了对资源的 操作类型

方法语义幂等性典型用途
GET获取资源✅ 是加载网页、获取数据
POST创建资源❌ 否提交表单、创建新记录
PUT替换资源✅ 是更新完整资源
PATCH部分更新❌ 否修改资源的部分字段
DELETE删除资源✅ 是删除指定资源

幂等性(Idempotent)

幂等操作意味着 执行一次和执行多次的效果相同。GET 请求不管发送多少次,服务器上的数据不会改变;而 POST 每次可能创建一条新记录。

CRUD 映射

Web 开发中,HTTP 方法与数据操作(CRUD)直接对应:

CRUDHTTP 方法示例
Create(创建)POSTPOST /api/users
Read(读取)GETGET /api/users/123
Update(更新)PUT / PATCHPUT /api/users/123
Delete(删除)DELETEDELETE /api/users/123

三、🔢 状态码(Status Codes)

服务器通过状态码告知客户端请求的处理结果,按首位数字分为五类:

3.1 分类总览

范围类别含义
1xx信息性请求已接收,继续处理
2xx成功请求已成功处理
3xx重定向需要进一步操作才能完成
4xx客户端错误请求有误(客户端的问题)
5xx服务器错误服务器处理请求时出错

3.2 常用状态码

状态码名称说明
200OK请求成功
201Created资源创建成功(常见于 POST 响应)
301Moved Permanently资源永久移动到新 URL
302Found资源临时重定向
304Not Modified资源未改变,使用缓存版本
400Bad Request请求语法错误,服务器无法理解
401Unauthorized未认证(需要登录)
403Forbidden已认证但无权限访问
404Not Found请求的资源不存在
500Internal Server Error服务器内部错误
502Bad Gateway网关/代理服务器收到无效响应
503Service Unavailable服务器暂时不可用(过载或维护)

记忆技巧

  • 2xx = 一切正常 ✅
  • 3xx = 去别的地方 ↗️
  • 4xx = 你搞错了 ❌(客户端问题)
  • 5xx = 我搞错了 💥(服务器问题)

四、📋 Headers(请求头 / 响应头)

Headers 是 HTTP 消息中的 键值对元数据,提供请求或响应的附加信息。

4.1 常见请求头

Header作用示例值
Host目标服务器的域名www.example.com
User-Agent客户端标识(浏览器类型)Mozilla/5.0 Chrome/120
Accept客户端可接受的内容类型text/html, application/json
Content-Type请求体的数据格式application/json
Authorization认证凭据Bearer eyJhbGci...
Cookie发送存储的 Cookiesession_id=abc123

4.2 常见响应头

Header作用示例值
Content-Type响应体的数据格式text/html; charset=UTF-8
Content-Length响应体大小(字节)3456
Set-Cookie设置 Cookiesession_id=abc123; HttpOnly
Cache-Control缓存策略max-age=3600
Location重定向目标 URLhttps://new-url.com

五、🔒 HTTPS

HTTPS = HTTP + TLS/SSL 加密,是 HTTP 的安全版本。

5.1 HTTP vs HTTPS

特性HTTPHTTPS
端口80443
加密❌ 明文传输✅ TLS 加密
证书不需要需要 SSL 证书
URL 前缀http://https://
浏览器标识⚠️ "不安全"🔒 锁形图标

5.2 HTTPS 工作原理(简化)

1. 客户端发起 HTTPS 请求
2. 服务器返回 SSL 证书(含公钥)
3. 客户端验证证书的合法性
4. 双方协商加密密钥(TLS 握手)
5. 后续通信使用对称加密传输数据

5.3 为什么必须使用 HTTPS

  • 数据安全:防止中间人窃听密码、信用卡等敏感信息
  • 数据完整:防止传输过程中的数据篡改
  • SEO 加分:Google 将 HTTPS 作为搜索排名因素
  • 现代 API:Geolocation、Service Worker 等仅在 HTTPS 下可用

六、📚 参考资源


← 返回 Web 开发研究