HTTP详解

一、什么是 HTTP?

HTTP(HyperText Transfer Protocol) 是互联网上最核心的通信协议之一。
它定义了 客户端(Client)服务器(Server) 之间如何请求和传输数据。

HTTP 是万维网(WWW)的基础,支持网页浏览、文件下载、API 调用等应用场景。

简单来说:HTTP 是“浏览器与服务器交流的语言”。

例如当你访问:

https://example.com/index.html

实际上发生了以下几步:

  1. 浏览器将域名 example.com 解析为 IP 地址;

  2. 通过 TCP(或 QUIC)建立连接;

  3. 向服务器发送 HTTP 请求;

  4. 服务器返回响应(HTML、图片、JSON 等);

  5. 浏览器渲染内容给你看。


二、HTTP 协议在网络中的位置

HTTP 位于 应用层,是 TCP/IP 协议族的最上层:

层级协议功能
应用层HTTP、FTP、SMTP、DNS直接为用户提供服务
传输层TCP、UDP端到端通信(可靠/不可靠)
网络层IP、ICMP寻址与路由
数据链路层Ethernet、Wi-Fi数据帧传输
物理层电信号、光信号比特流传输

HTTP 依赖于 TCP(可靠传输),而 HTTPS 则依赖于 TCP + TLS。


三、一次完整的 HTTP 通信流程

以浏览器访问网页为例:

  1. DNS 解析

    • 把域名解析为 IP 地址;

    • 可能经过本地缓存、路由器缓存、DNS 服务器等多级解析。

  2. 建立连接

    • HTTP/1.x:三次握手建立 TCP 连接;

    • HTTPS:建立 TCP 后还要进行 TLS 握手(证书验证、密钥交换)。

  3. 发送 HTTP 请求

    • 浏览器构造请求报文,包含方法、路径、头、体;

    • 通过 TCP 发送给服务器。

  4. 服务器处理请求

    • Web 服务器(如 Nginx)解析报文;

    • 交给后端程序(如 Go、Node.js、Python)处理;

    • 生成响应。

  5. 返回响应

    • 服务器返回状态码、响应头、响应体;

    • 浏览器解析内容、执行脚本、加载资源。

  6. 关闭连接或复用

    • HTTP/1.0 默认短连接;

    • HTTP/1.1 及以后支持持久连接(keep-alive)。


四、HTTP 报文结构详解

1️⃣ 请求报文(Request)

<请求行>
<请求头>
<空行>
<请求体>

示例:

POST /api/login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 35

{"username": "test", "password": "123"}

解析:

  • 请求行:请求方法 + 路径 + 协议版本

  • 请求头:描述请求的额外信息(类型、长度、认证信息等)

  • 请求体:请求内容(POST/PUT 一般包含)


2️⃣ 响应报文(Response)

<状态行>
<响应头>
<空行>
<响应体>

示例:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 45
Set-Cookie: sessionid=abc123; HttpOnly

{"message": "login success", "code": 0}

五、常见 HTTP 方法

方法描述是否安全是否幂等是否有请求体
GET获取资源
POST提交数据(新增)
PUT更新资源(整体)
PATCH部分更新资源
DELETE删除资源
HEAD获取资源元信息
OPTIONS查看服务器支持哪些方法

💡 幂等:多次调用结果相同,例如多次 DELETE 相同资源。


六、HTTP 状态码全表与解析

分类范围含义
1xx100–199信息性,表示请求已接收继续处理
2xx200–299成功
3xx300–399重定向
4xx400–499客户端错误
5xx500–599服务器错误

常用状态码详解:

✅ 成功类
  • 200 OK:请求成功;

  • 201 Created:资源已创建;

  • 204 No Content:成功但无内容返回。

🔁 重定向类
  • 301 Moved Permanently:永久重定向;

  • 302 Found:临时重定向;

  • 304 Not Modified:使用缓存,无需重新下载。

⚠️ 客户端错误
  • 400 Bad Request:请求参数错误;

  • 401 Unauthorized:未认证;

  • 403 Forbidden:权限不足;

  • 404 Not Found:资源不存在;

  • 429 Too Many Requests:请求太频繁。

💀 服务器错误
  • 500 Internal Server Error:通用错误;

  • 502 Bad Gateway:网关错误(上游服务异常);

  • 503 Service Unavailable:服务器过载或维护;

  • 504 Gateway Timeout:上游超时。


七、HTTP 首部字段详解

📤 请求头

字段示例说明
Hostexample.com请求目标主机
User-AgentMozilla/5.0客户端信息
Acceptapplication/json希望返回的数据类型
AuthorizationBearer token携带认证信息
CookieuserId=100携带 Cookie
Content-Typeapplication/json请求体格式
Refererhttps://google.com来源页面(防盗链)

📥 响应头

字段示例说明
Content-Typetext/html返回内容类型
Content-Length1024返回体长度
Cache-Controlmax-age=3600缓存策略
Set-Cookiesession=abc123设置 Cookie
Access-Control-Allow-Origin*允许跨域访问
ETag"a1b2c3"内容唯一标识(缓存验证)

八、HTTP 的无状态与会话保持

HTTP 是 无状态的,每次请求独立。
服务器不会记住你上次是谁。

解决方案:

1️⃣ Cookie

浏览器保存小段文本,每次请求自动带上:

Set-Cookie: token=abc123; HttpOnly
2️⃣ Session

服务器端保存登录状态,通过 Cookie 里的 session ID 识别用户。

3️⃣ Token / JWT

前后端分离常用方案:
服务器签发 Token,客户端每次请求带上:

Authorization: Bearer eyJhbGciOiJIUzI1Ni...

九、HTTPS:安全版 HTTP

HTTP 是明文传输,容易被窃听。
HTTPS = HTTP + SSL/TLS 加密层。

加密原理(简化流程):

  1. 浏览器请求 HTTPS;

  2. 服务器返回数字证书(含公钥);

  3. 浏览器验证证书;

  4. 双方协商对称密钥;

  5. 后续通信都加密传输。

优点:

✅ 防止中间人攻击
✅ 防止数据篡改
✅ 提供身份验证

缺点:

⚠️ 握手开销大(HTTP/2/3 已优化)
⚠️ 证书需付费或维护(Let’s Encrypt 可免费)


十、HTTP 性能优化与演进

🔹 HTTP/1.0 的问题

  • 每次请求都要新建 TCP 连接;

  • 连接开销大;

  • 无法并行下载。

🔹 HTTP/1.1 改进

  • 支持 长连接(Keep-Alive)

  • 支持 管线化(Pipelining)

  • 增加缓存控制头(Cache-Control、ETag)。

🔹 HTTP/2

  • 二进制分帧:更高效;

  • 多路复用:同一连接并发多个请求;

  • 头部压缩(HPACK)

  • 服务器推送(Server Push)

🔹 HTTP/3(基于 QUIC)

  • 基于 UDP

  • 0-RTT 连接建立

  • 无队头阻塞

  • 更适合移动网络与高延迟环境。


十一、HTTP 缓存机制详解

缓存是性能优化的关键。

强缓存

Cache-ControlExpires 控制,命中后浏览器直接用本地副本。

Cache-Control: max-age=3600

协商缓存

ETagLast-Modified 控制,需要与服务器验证。

If-None-Match: "abc123"
→ HTTP/1.1 304 Not Modified

浏览器缓存策略总结:

类型是否请求服务器典型头部
强缓存Cache-Control / Expires
协商缓存是(但不返回实体)ETag / Last-Modified

十二、抓包观察 HTTP 流程

你可以使用:

  • Chrome 开发者工具(Network 面板)

  • Postman / curl

  • Wireshark / Fiddler

例如:

curl -v https://www.baidu.com

输出中可看到完整请求头、响应头、TLS 握手信息。


十三、HTTP 与 RESTful API

REST(Representational State Transfer)是一种基于 HTTP 的设计风格。

示例:

动作URL方法
获取用户列表/usersGET
获取单个用户/users/1GET
创建用户/usersPOST
更新用户/users/1PUT
删除用户/users/1DELETE

十四、总结:HTTP 学习路线图

阶段内容工具
初级基础请求响应、状态码、头部curl、浏览器
中级HTTPS、缓存、Cookie/SessionPostman、Fiddler
高级HTTP/2、HTTP/3、性能调优Wireshark、nghttp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值