目录
[1.1 HTTP的核心定位](#1.1 HTTP的核心定位)
[1.2 HTTP的核心特性](#1.2 HTTP的核心特性)
[1.3 认识URL](#1.3 认识URL)
二、HTTP请求与响应:协议的"语法规则"
[2.1 HTTP请求格式详解](#2.1 HTTP请求格式详解)
[2.2 HTTP响应格式详解](#2.2 HTTP响应格式详解)
[2.3 核心概念:报头与有效载荷](#2.3 核心概念:报头与有效载荷)
三、HTTP核心方法:不同场景的"通信指令"
[3.1 重点方法:GET与POST深度对比](#3.1 重点方法:GET与POST深度对比)
[3.2 其他常用方法](#3.2 其他常用方法)
四、HTTP状态码:服务器的"响应状态报告"
[4.1 状态码分类逻辑](#4.1 状态码分类逻辑)
[4.2 高频状态码详解](#4.2 高频状态码详解)
五、关键HTTP报头:控制通信的"核心参数"
[5.1 请求报头核心字段](#5.1 请求报头核心字段)
[5.2 响应报头核心字段](#5.2 响应报头核心字段)
[5.3 连接控制:Connection报头](#5.3 连接控制:Connection报头)
六、Cookie与Session:解决HTTP无状态的"关键方案"
[6.1 痛点:HTTP无状态的问题](#6.1 痛点:HTTP无状态的问题)
[6.2 Cookie:客户端的"状态存储"](#6.2 Cookie:客户端的“状态存储”)
[6.3 Session:服务器端的"状态管理"](#6.3 Session:服务器端的“状态管理”)
[6.4 Cookie与Session的核心区别](#6.4 Cookie与Session的核心区别)
七、总结
一、引言:HTTP------Web通信的"通用语言"
在互联网世界中,HTTP(超文本传输协议)是应用层最核心的协议之一。它定义了客户端(如浏览器、自定义程序)与Web服务器之间的通信规则,是网页浏览、接口调用、文件传输等场景的基础。无论是日常上网还是后端开发,理解HTTP的底层逻辑都是必备技能。
1.1 HTTP的核心定位
- HTTP是应用层协议,基于TCP协议实现(可靠传输保障);
- 核心作用:规范客户端与服务器之间的请求格式、响应格式及交互逻辑;
- 适用场景:网页访问(HTML)、API接口(JSON/XML)、文件传输(FTP基于HTTP扩展)等。
1.2 HTTP的核心特性
- 无连接 :HTTP/1.0默认一次请求-响应后关闭TCP连接;HTTP/1.1支持
keep-alive持久连接,可复用TCP连接处理多个请求; - 无状态:服务器不保存客户端的状态信息,每次请求都是独立的(需通过Cookie/Session补充状态管理);
- 简单灵活:协议格式简洁,支持多种数据格式(文本、图片、JSON等),可通过报头扩展功能。
1.3 认识URL
URL (Uniform Resource Locator,统一资源定位符) 是客户端定位互联网资源的 "唯一地址",我们日常俗称的 "网址" 本质就是 URL。HTTP 请求的核心目的,就是通过 URL 找到目标服务器上的具体资源(如网页、接口、文件)。构成如下:

二、HTTP请求与响应格式
HTTP的通信本质是"请求-响应"模型,客户端发送符合格式的请求,服务器返回符合格式的响应。两者的格式有固定规则,核心由"首行+报头+空行+正文"四部分组成。
2.1 HTTP请求格式详解
请求是客户端向服务器发起的"指令",完整格式如下:

2.2 HTTP响应格式详解
响应是服务器对请求的"反馈",格式与请求对称:

2.3 核心概念:报头与有效载荷
- 报头(Header):键值对格式,用于控制通信细节(如数据格式、连接状态、身份验证),是HTTP的"控制中心";
- 有效载荷(Payload):即正文(Body),是实际传输的数据(如HTML、JSON、表单数据);
- 关联:如果存在正文,报头中通常会通过
Content-Length(固定长度)或Transfer-Encoding: chunked(分块传输)说明正文的长度信息。
三、HTTP核心方法:不同场景的"通信指令"
HTTP方法定义了请求的"操作类型",核心是告知服务器"要做什么",常用方法有8种,其中GET和POST是使用最高频的。
3.1 重点方法:GET与POST深度对比
| 维度 | GET方法 | POST方法 |
|---|---|---|
| 核心用途 | 获取资源(如浏览网页、查询数据) | 提交数据(如登录、表单提交) |
| 参数位置 | 拼接在URL后(如?uid=1&name=test) |
放在请求正文(Body)中 |
| 参数长度 | 受URL长度限制(通常不超过2KB) | 无限制(适合大量数据提交) |
| 安全性 | 参数明文传输,不安全 | 参数在正文,相对安全(HTTPS更安全) |
| 缓存支持 | 支持(浏览器可缓存GET请求结果) | 不支持默认缓存 |
| 幂等性 | 幂等(多次请求结果一致) | 非幂等(多次提交可能重复创建资源) |
关键注意:
- GET请求的参数需URL编码(如
+转%2B、空格转%20),避免特殊字符破坏URL格式; - POST请求需通过
Content-Type指定正文格式,常见类型:application/x-www-form-urlencoded:表单默认格式(键值对);application/json:接口常用格式(JSON字符串);multipart/form-data:文件上传格式。
3.2 其他常用方法
- HEAD:与GET一致,但仅返回响应报头,不返回正文(用于验证URL有效性);
- PUT:上传文件/更新资源(RESTful API中常用,幂等);
- DELETE:删除资源(RESTful API中常用,幂等);
- OPTIONS :查询服务器支持的HTTP方法(如
curl -X OPTIONS http://localhost); - TRACE:追踪请求路径(用于调试,实际很少用);
- CONNECT:建立隧道连接(如HTTPS的代理连接)。
四、HTTP状态码:服务器的"响应状态报告"
状态码是服务器对请求结果的"数字反馈",共分5大类,核心是让客户端快速判断请求是否成功、失败原因是什么。
4.1 状态码分类逻辑
| 分类 | 含义 | 核心特点 |
|---|---|---|
| 1XX | 信息性状态码 | 请求已接收,正在处理(如100 Continue) |
| 2XX | 成功状态码 | 请求正常处理完成(如200 OK) |
| 3XX | 重定向状态码 | 需要客户端附加操作(如302跳转) |
| 4XX | 客户端错误状态码 | 请求存在错误(如404资源不存在) |
| 5XX | 服务器错误状态码 | 服务器处理失败(如500内部错误) |
4.2 高频状态码详解
| 状态码 | 含义 | 应用样例 |
|---|---|---|
| 100 | Continue | 上传大文件时,服务器告诉客户端可以继续上传 |
| 200 | OK | 访问网站首页,服务器返回网页内容 |
| 201 | Created | 发布新文章,服务器返回文章创建成功的信息 |
| 204 | No Content | 删除文章后,服务器返回"无内容"表示操作成功 |
| 301 | Moved Permanently | 网站换域名后,自动跳转到新域名;搜索引擎更新网站链接时使用 |
| 302 | Found | 用户登录成功后,重定向到用户首页 |
| 304 | Not Modified | 浏览器缓存机制,对未修改的资源返回304状态码 |
| 400 | Bad Request | 填写表单时,格式不正确导致提交失败 |
| 401 | Unauthorized | 访问需要登录的页面时,未登录或认证失败 |
| 403 | Forbidden | 尝试访问你没有权限查看的页面 |
| 404 | Not Found | 访问不存在的网页链接 |
| 500 | Internal Server Error | 服务器崩溃或数据库错误导致页面无法加载 |
| 502 | Bad Gateway | 使用代理服务器时,代理服务器无法从上游服务器获取有效响应 |
| 503 | Service Unavailable | 服务器维护或过载,暂时无法处理请求 |
以下是仅包含重定向相关状态码的表格:
| 状态码 | 含义 | 是否为临时重定向 | 应用样例 |
|---|---|---|---|
| 301 | Moved Permanently | 否(永久重定向) | 网站换域名后,自动跳转到新域名;搜索引擎更新网站链接时使用 |
| 302 | Found 或 See Other | 是(临时重定向) | 用户登录成功后,重定向到用户首页 |
| 307 | Temporary Redirect | 是(临时重定向) | 临时重定向资源到新的位置(较少使用) |
| 308 | Permanent Redirect | 否(永久重定向) | 永久重定向资源到新的位置(较少使用) |
五、关键HTTP报头:控制通信的"核心参数"
HTTP报头是通信的"配置项",控制数据格式、连接状态、缓存策略等,以下是最常用的核心报头:
5.1 请求报头核心字段
| 报头名 | 含义 | 示例 |
|---|---|---|
| Host | 目标服务器的主机名+端口 | Host: www.baidu.com:80 |
| User-Agent | 客户端环境信息(浏览器/系统) | User-Agent: Mozilla/5.0 (Windows NT 10.0) |
| Accept | 客户端可接受的响应格式 | Accept: text/html,application/json |
| Accept-Encoding | 客户端支持的压缩格式 | Accept-Encoding: gzip, deflate |
| Cookie | 客户端携带的状态数据 | Cookie: sessionid=abc123; username=test |
| Referer | 请求的来源URL(跳转前地址) | Referer: http://www.baidu.com |
| Content-Type | 请求正文的格式(POST专用) | Content-Type: application/json |
| Content-Length | 请求正文的长度(字节数) | Content-Length: 36 |
5.2 响应报头核心字段
| 报头名 | 含义 | 示例 |
|---|---|---|
| Server | 服务器类型 | Server: Nginx/1.18.0 |
| Content-Type | 响应正文的格式 | Content-Type: text/html;charset=utf-8 |
| Content-Length | 响应正文的长度 | Content-Length: 2048 |
| Date | 响应时间(UTC格式) | Date: Fri, 29 Sep 2017 05:10:13 GMT |
| Set-Cookie | 服务器向客户端写入Cookie | Set-Cookie: username=test; expires=Thu, 18 Dec 2024 UTC |
| Location | 重定向的目标URL(3XX专用) | Location: https://www.new-url.com |
| Cache-Control | 缓存控制策略 | Cache-Control: max-age=3600(缓存1小时) |
5.3 连接控制:Connection报头
Connection: keep-alive:HTTP/1.1默认值,保持TCP连接复用(减少连接建立开销);Connection: close:请求-响应后关闭TCP连接(HTTP/1.0默认值);- 核心价值:持久连接(
keep-alive)能显著提升多资源请求的效率(如网页加载图片、CSS、JS时,无需重复建立TCP连接)。
六、Cookie与Session:解决HTTP无状态的"关键方案"
HTTP的"无状态"特性导致服务器无法记住客户端状态(如登录状态、购物车数据),而Cookie和Session是解决该问题的核心方案。
6.1 痛点:HTTP无状态的问题
- 场景:用户登录成功后,访问其他页面时服务器无法识别"该用户已登录";
- 本质:每次请求都是独立的,服务器没有存储客户端的上下文信息;
- 解决思路:通过"客户端存储状态"(Cookie)或"服务器存储状态"(Session)补充上下文。
6.2 Cookie:客户端的"状态存储"
核心定义:
Cookie是服务器发送给客户端的"小块数据",由浏览器存储在本地(按域名隔离),后续请求时自动携带该数据到服务器。
工作流程:
- 客户端首次访问服务器,服务器通过
Set-Cookie报头向客户端写入Cookie; - 浏览器存储Cookie(会话Cookie:关闭浏览器失效;持久Cookie:设置
expires过期时间); - 客户端后续访问该服务器时,自动在
Cookie报头中携带存储的数据; - 服务器通过Cookie识别客户端身份/状态。
完整格式:
Set-Cookie: <名称>=<值>; expires=<过期时间>; path=<路径>; domain=<域名>; secure; HttpOnly
expires:持久Cookie的过期时间(UTC格式,如Thu, 18 Dec 2024 12:00:00 UTC);path:限制Cookie仅在指定路径下生效(如path=/a/b,仅/a/b路径的请求携带);domain:指定Cookie生效的域名(如domain=.example.com,子域名也生效);secure:仅HTTPS连接时携带Cookie(防止HTTP传输时被窃取);HttpOnly:禁止JavaScript访问Cookie(防止XSS攻击窃取)。
6.3 Session:服务器端的"状态管理"
核心定义:
Session是服务器为客户端创建的"状态存储空间",通过唯一的SessionID关联客户端,SessionID通常通过Cookie传递。
工作流程:
- 客户端首次登录(提交用户名密码),服务器验证通过后创建Session(存储用户信息、登录状态);
- 服务器生成唯一
SessionID,通过Set-Cookie: sessionid=<ID>发送给客户端; - 客户端后续请求时,通过
Cookie报头携带sessionid; - 服务器通过
sessionid找到对应的Session,获取客户端状态。
核心优势:
- 安全性更高:用户敏感信息(如用户名、权限)存储在服务器端,客户端仅携带
SessionID; - 便于管理:服务器可主动销毁Session(如用户登出、超时失效)。
6.4 Cookie与Session的核心区别
| 维度 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端(浏览器本地) | 服务器端(内存/数据库/缓存) |
| 存储内容 | 少量字符串(通常不超过4KB) | 任意数据(用户信息、权限等) |
| 安全性 | 较低(客户端可篡改,需加密) | 较高(服务器控制,仅传递SessionID) |
| 生命周期 | 可设置过期时间(持久/会话) | 默认会话级(服务器重启/超时失效) |
| 依赖关系 | 独立使用或配合Session传递SessionID | 依赖Cookie(或URL重写)传递SessionID |
七、总结
- 协议基础与通信模型
- HTTP基于可靠的TCP连接,采用经典的"请求-响应"模型。
- 其"无连接"与"无状态"的特性,既保证了协议的简洁性,也引出了持久连接与状态管理(Cookie/Session)等关键技术。
- 格式规范与语义定义
- 请求与响应报文具有严谨的"首行-报头-空行-正文"四段式结构。
- HTTP方法(如GET/POST)为请求赋予了明确的语义,状态码则对响应结果进行了精确的分类与描述。
- 核心机制与关键特性
- 报头系统是HTTP的"控制中心",精细化管理着内容格式、缓存策略、连接控制等方方面面。
- 状态管理方案(Cookie与Session)是解决HTTP无状态问题的关键,二者在存储位置、安全性和生命周期上各有侧重,共同支撑起有状态的Web应用。
- 实践指导意义
- 理解GET与POST在安全性、幂等性、参数传递上的根本区别,是正确设计API接口的基础。
- 掌握常见状态码(如200, 404, 500, 302)的准确含义,是进行前后端联调与问题排查的必备技能。