目录
[1.1. http请求方法](#1.1. http请求方法)
[4.1.HTTP 连接管理基础](#4.1.HTTP 连接管理基础)
[4.2.1.短连接(HTTP/1.0 默认)](#4.2.1.短连接(HTTP/1.0 默认))
[4.2.2.长连接(HTTP/1.1 默认)](#4.2.2.长连接(HTTP/1.1 默认))
[4.2.3.多路复用(HTTP/2 引入)](#4.2.3.多路复用(HTTP/2 引入))
[4.2.4.QUIC 连接(HTTP/3 核心)](#4.2.4.QUIC 连接(HTTP/3 核心))
1.http请求
1.1. http请求方法

其中最常用的就是 GET 方法和 POST 方法
| 特性 | GET | POST |
|---|---|---|
| 参数位置 | URL 查询字符串(?key1=value1&key2=value2) |
请求体(Request Body) |
| 长度限制 | 受浏览器/服务器限制(通常约2048字符) | 无理论限制(受服务器配置影响) |
| 安全性 | 较低(参数暴露在URL、日志、浏览器历史中) | 相对较高(参数不直接显示在URL) |
| 缓存 | 可被缓存(需配置Cache-Control) |
默认不缓存 |
| 典型用途 | 获取数据(如搜索、分页) | 提交数据(如表单、文件上传) |
| 数据类型 | 仅支持ASCII字符 | 支持二进制数据(如文件) |
值得注意的是,两者均为明文传输 ,敏感数据(如密码)必须通过 HTTPS 加密
1.2.http请求报头
HTTP 请求报头分为通用报头、请求报头、实体报头 和 安全相关报头四类
| Header | 作用 | 示例 |
|---|---|---|
Host |
指定服务器域名和端口 | Host: www.baidu.com |
User-Agent |
客户端标识 | User-Agent: Chrome/120.0 |
Accept |
可接收的响应类型 | Accept: text/html,image/* |
Accept-Encoding |
支持的压缩算法 | Accept-Encoding: gzip, deflate |
Accept-Language |
首选语言 | Accept-Language: zh-CN,zh;q=0.9 |
Connection |
连接管理 | Connection: keep-alive 或 close |
Content-Type |
请求体类型(POST时) | Content-Type: application/json |
Content-Length |
请求体长度 | Content-Length: 256 |
Cookie |
携带状态信息 | Cookie: sessionId=abc123 |
Referer |
来源页面 | Referer: https://www.google.com |
- Host:HTTP/1.1 必须包含,否则服务器会拒绝请求
- Content-Type:POST/PUT 请求带请求体时通常需要指定
- User-Agent 是 HTTP 请求头中标识客户端(浏览器、爬虫等)详细信息的字段,服务器通过它优化内容适配(如推荐下载版本)或实施反爬策略(如拦截非浏览器请求),而爬虫常通过随机化合法浏览器的 User-Agent 或结合无头浏览器等技术伪装身份以绕过检测,但需注意合法性与伦理边界,避免高频请求对服务器造成负担
2.http响应
2.1.http响应状态码及其描述
| 分类 | 状态码 | 描述 | 典型场景 |
|---|---|---|---|
| 2xx 成功 | 200 OK |
请求成功,服务器已正确处理并返回响应。 | 访问网页、API 请求成功。 |
201 Created |
请求成功且服务器创建了新资源(如 POST 请求后)。 | 提交表单后创建新用户或订单。 | |
204 No Content |
请求成功,但无返回内容(如 DELETE 请求后)。 | 删除数据后返回空响应。 | |
| 3xx 重定向 | 301 Moved Permanently |
资源永久迁移到新 URL,浏览器自动跳转并缓存新地址。 | 网站域名更换、HTTPS 强制跳转。 |
302 Found (临时重定向) |
资源临时迁移到新 URL,浏览器跳转但不缓存新地址(可能被 307 替代)。 |
登录后跳转到首页、促销页面临时链接。 | |
307 Temporary Redirect |
临时重定向(严格遵循 HTTP 方法,如 POST 请求重定向后仍为 POST)。 | 与 302 类似,但保留请求方法。 |
|
304 Not Modified |
资源未修改,浏览器可使用缓存版本(需配合 If-Modified-Since 等请求头)。 |
静态资源(如 CSS/JS)未更新时返回。 | |
| 4xx 客户端错误 | 400 Bad Request |
请求语法错误或参数无效(如缺少必填字段)。 | 提交表单时未填写必填项。 |
401 Unauthorized |
未认证或认证失败(需提供有效 Authorization 头)。 |
未登录访问需要权限的接口。 | |
403 Forbidden |
服务器理解请求但拒绝执行(如无权限访问资源)。 | 普通用户尝试访问管理员页面。 | |
404 Not Found |
请求的资源不存在(如错误的 URL 或已删除)。 | 访问不存在的网页或 API 端点。 | |
405 Method Not Allowed |
请求方法不被允许(如用 GET 请求 POST 接口)。 | 对只支持 POST 的接口发送 GET 请求。 | |
429 Too Many Requests |
客户端请求频率过高,触发限流(需配合 Retry-After 头)。 |
爬虫或高频 API 调用被限制。 | |
| 5xx 服务器错误 | 500 Internal Server Error |
服务器内部错误(如代码异常、数据库连接失败)。 | 后端服务崩溃或未处理的异常。 |
502 Bad Gateway |
服务器作为网关时收到上游服务器的无效响应(如 Nginx 代理后端失败)。 | 反向代理服务器与后端服务通信异常。 | |
503 Service Unavailable |
服务器暂时不可用(如过载、维护中,需配合 Retry-After 头)。 |
服务器宕机或流量激增导致暂时无法响应。 | |
504 Gateway Timeout |
服务器作为网关时未及时收到上游服务器的响应(如超时)。 | 反向代理等待后端服务超时。 |
- 重定向状态码
301:永久重定向,浏览器会缓存新 URL,后续请求直接访问新地址
302/307:临时重定向,浏览器每次都会重新请求新 URL(307 更严格保留请求方法)
- 客户端错误
401 vs 403:401 是未认证(需登录),403 是已认证但无权限
404:资源不存在,可能是路径错误或已被删除
404 页面是服务器针对不存在的资源请求返回的 HTTP 响应,其状态码为 404 Not Found,响应正文通常包含自定义的友好错误页面(如提示信息、导航链接等),既明确告知客户端资源缺失,又通过优化用户体验和流量引导降低用户流失,同时可通过日志记录辅助排查无效链接问题
HTTP/1.1 404 Not Found # 状态行:状态码 + 状态描述
Content-Type: text/html # 响应头:声明正文是 HTML 格式
Content-Length: 1024 # 响应头:正文长度(可选)
<html> # 响应正文:自定义的 404 页面内容
<head><title>404 - 页面未找到</title></head>
<body>
<h1>很抱歉,您访问的页面不存在</h1>
<p>可能是链接错误或页面已被删除。</p>
<a href="/">返回首页</a>
</body>
</html>
- 服务器错误
500:通用服务器错误,需检查后端日志
502/504:通常与代理或负载均衡相关,需排查上游服务
2.2.重定向
重定向本质上就是让浏览器或客户端从一个 URL 自动跳转到另一个 URL
核心机制
- HTTP 状态码触发:服务器通过返回 3xx 状态码(如 301、302)告知客户端需要跳转
- Location 头指定目标:响应头中必须包含 Location 字段,指向新 URL(例如 Location: https://new.example.com)
- 客户端自动执行:浏览器或 HTTP 客户端(如 curl、爬虫)收到 3xx 后,会自动发起对新 URL 的请求
Location 字段是 HTTP 重定向的核心机制:当服务器因资源迁移、权限控制等原因无法直接响应请求时,会返回 3xx 状态码(如 301、302)并在响应头中添加 Location 字段指定新地址,浏览器或客户端检测到 3xx 后会自动根据 Location 的值发起对新 URL 的请求,从而实现服务端引导客户端跳转的完整重定向流程
2.3.http响应报头
| Header | 作用 | 示例 |
|---|---|---|
Content-Type |
关键字段:响应体MIME类型 | Content-Type: text/html; charset=utf-8 |
Content-Length |
响应体大小(字节) | Content-Length: 2048 |
Content-Encoding |
压缩算法 | Content-Encoding: gzip |
Set-Cookie |
设置Cookie | Set-Cookie: sessionId=xyz; HttpOnly |
Cache-Control |
缓存策略 | Cache-Control: max-age=3600 |
Location |
重定向地址(301/302) | Location: /new-page |
Server |
服务器信息 | Server: nginx/1.18.0 |
Connection |
连接管理 | Connection: keep-alive |
2.4.Content-Type的重要性和常见值
Content-Type告诉浏览器如何解析响应体数据,错误设置会导致显示异常或安全问题
| 类型 | Content-Type | 说明 |
|---|---|---|
| 文本 | text/html; charset=utf-8 |
HTML页面 |
| 文本 | text/plain |
纯文本 |
| 文本 | text/css |
CSS样式表 |
| 脚本 | application/javascript |
JavaScript |
| 图片 | image/jpeg、image/png、image/gif |
图片资源 |
| 应用 | application/json |
JSON数据 |
| 应用 | application/xml |
XML数据 |
| 二进制 | application/octet-stream |
通用二进制流 |
| 表单 | multipart/form-data |
文件上传 |
3.http版本简介
| 特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| 传输协议 | TCP | TCP | TCP | UDP(基于QUIC协议) |
| 连接模型 | 短连接(每次请求新建TCP连接) | 持久连接(Keep-Alive默认启用) |
多路复用(单连接并行请求) | 多路复用(QUIC连接,无队头阻塞) |
| 数据传输格式 | 纯文本 | 纯文本 | 二进制分帧(Frames) |
二进制分帧(优化版QUIC帧) |
| 头部压缩 | 不支持 | 不支持 | HPACK(基于霍夫曼编码) | QPACK(动态表优化,抗丢包) |
| 服务器推送 | 不支持 | 不支持 | 支持(Server Push) |
支持(优化版推送机制) |
| 请求优先级 | 不支持 | 不支持 | 支持(STREAM_DEPENDENCY) |
支持(QUIC流优先级控制) |
| 安全性 | 无内置加密 | 无内置加密(依赖HTTPS) | 依赖HTTPS(TLS 1.2+) | 依赖HTTPS(默认支持TLS 1.3) |
| 典型延迟问题 | 高(频繁建立连接) | 中(持久连接减少延迟) | 低(多路复用避免队头阻塞) | 极低(0-RTT连接建立 + 快速迁移) |
| 适用场景 | 早期Web | 传统Web服务 | 高性能Web应用(如视频流) | 移动网络/高丢包环境(如5G/卫星通信) |
- HTTP/1.0 → HTTP/1.1
核心改进:持久连接解决短连接性能问题,支持管道化但未广泛使用
新增功能:分块传输编码、缓存控制等
- HTTP/1.1 → HTTP/2
核心改进:二进制分帧层实现多路复用,彻底解决队头阻塞问题;头部压缩减少冗余数据传输
新增功能:服务器推送、请求优先级、流控制
- HTTP/2 → HTTP/3
核心改进:用QUIC协议替代TCP,通过UDP实现更快的连接建立和迁移能力;改进的头部压缩抗丢包性更强。
新增功能:0-RTT连接建立、连接ID支持移动场景无缝切换
4.http连接管理
4.1.HTTP 连接管理基础
HTTP 是基于 TCP 协议 的应用层协议,核心机制包括:
- 连接建立与终止:通过 TCP 三次握手建立连接,四次挥手释放连接
- 请求-响应模型:客户端发送请求,服务器返回响应后,连接可能关闭或复用
一个网页包含HTML文档本身及其引用的所有图片、样式、脚本等独立资源,每个资源都需要单独发起HTTP请求,但在HTTP/1.1长连接或HTTP/2多路复用下,多个请求可以复用同一个TCP连接
例如:
用户只访问qq域名不加任何参数,服务器会做出响应,一般返回首页源代码,浏览器做出解释后显示给用户,如果是网页有图片资源,浏览器就会申请图片资源。短连接时是一个申请一个响应,长连接时可以连续的请求与响应
4.2.连接类型与演进
4.2.1.短连接(HTTP/1.0 默认)
行为:每次请求响应后立即关闭 TCP 连接
问题:
高延迟:网页含多资源(如图片)时,需多次建立连接,重复 TCP 握手和慢启动过程
资源浪费:频繁创建/销毁连接消耗 CPU 和内存
GET /index.html HTTP/1.0
Host: example.com
[服务器响应后连接关闭]
4.2.2.长连接(HTTP/1.1 默认)
行为:通过 Connection: keep-alive 头字段维持连接,支持连续请求响应
优化:
复用连接:同一连接可传输多个资源,减少 TCP 握手开销
持久化参数:可通过 Keep-Alive: timeout=60, max=100 控制连接存活时间(秒)和最大请求数
问题:
队头阻塞:同一连接内请求需按顺序处理,若某个请求阻塞(如大文件下载),后续请求需等待
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
[服务器响应后连接保持打开,客户端可继续发送其他请求]
4.2.3.多路复用(HTTP/2 引入)
行为:在单个 TCP 连接内通过 二进制分帧层 并行传输多个请求/响应流
优势:
彻底解决队头阻塞:流之间独立调度,互不影响
高效利用带宽:动态调整流优先级(如先加载关键资源)
[HTTP/2 连接建立后,客户端可并行发送多个流(Stream)]
Stream 1: GET /style.css
Stream 2: GET /script.js
[服务器可交错返回响应帧]
4.2.4.QUIC 连接(HTTP/3 核心)
行为:基于 UDP 的 QUIC 协议实现连接,支持 0-RTT 快速建立 和 连接迁移
优势:
**抗丢包:**每个流独立拥塞控制,避免全局阻塞
**移动友好:**切换网络(如 Wi-Fi → 4G)时保持连接不断
[HTTP/3 首次连接即可发送加密数据,无需完整 TLS 握手]
QUIC Connection ID: 0x123456
[后续连接可复用 ID,实现无缝迁移]