Appearance
HTTP 协议详解与状态码头信息指南
本文全面系统地梳理 HTTP 协议的交互模型、版本演进、请求与响应报文结构、常用 HTTP 状态码及核心 Headers 头信息的作用。
1. HTTP 协议概述
HTTP (HyperText Transfer Protocol,超文本传输协议) 规定了客户端(如浏览器)与 Web 服务器之间数据传输的格式和通信规则。
HTTP 协议版本演化
- HTTP/1.0:短连接模式。客户端与服务器建立 TCP 连接 -> 发送请求 -> 接收响应 -> 立即断开连接。每次请求都需要重新建立连接。
- HTTP/1.1(主流扩展):保持连接(Keep-Alive/长连接)。客户端与服务器建立连接后可复用 TCP 连接进行多次请求与响应,若超过超时时间无新请求则自动关闭。
2. HTTP 请求报文结构
HTTP 请求报文由 请求行 (Request Line)、请求头 (Request Headers)、空行 和 请求体 (Request Body) 四部分组成:
http
POST /login HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/json
Referer: http://localhost:8080/index.html
If-Modified-Since: Tue, 11 Jul 2026 18:23:51 GMT
Content-Type: application/x-www-form-urlencoded
username=admin&password=1232.1 请求行
格式:请求方式 资源路径 协议版本
- 请求方式:主要包括
GET与POSTGET:参数直接拼接在 URL 后面,长度受限,适合查询操作,不安全。POST:参数封装在请求体中,无长度限制,适合提交数据/修改操作,安全性相对更高。
2.2 核心请求头信息
| 请求头 (Header) | 说明与应用场景 |
|---|---|
Host | 指定目标服务器的主机名与端口号(如 www.example.com:80)。 |
Referer | 记录当前请求的来源页面 URL。常用于站点防盗链与访问来源统计分析。 |
User-Agent | 包含客户端浏览器类型、操作系统及版本信息,服务端可据此做设备适配。 |
If-Modified-Since | 记录上一次获取资源时服务器返回的修改时间。与响应头 Last-Modified 及状态码 304 配合实现浏览器本地缓存控制。 |
Accept | 告知服务器客户端能够接收并处理的媒体类型(如 text/html, image/*)。 |
Accept-Encoding | 告知服务器客户端支持的压缩算法(如 gzip, deflate, br)。 |
3. HTTP 响应报文结构
HTTP 响应报文由 响应行 (Status Line)、响应头 (Response Headers)、空行 和 响应体 (Response Body) 组成:
http
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 1024
Set-Cookie: JSESSIONID=ABC123XYZ
<html><body><h1>Hello World</h1></body></html>3.1 状态码 (Status Codes) 详解
响应行包含 HTTP 状态码,用以标识服务器处理请求的结果状态:
| 状态码 | 含义 | 解释与案例 |
|---|---|---|
200 OK | 请求成功 | 服务器已成功处理请求,并正常返回请求的资源数据。 |
302 Found | 临时重定向 | 请求的资源已被临时移动。配合响应头 Location 指引客户端重定向访问新地址。 |
304 Not Modified | 资源未修改 | 服务器端资源自上次请求后未发生任何改动,通知客户端直接从本地缓存中读取数据。 |
404 Not Found | 资源不存在 | 客户端请求的 URL 路径在服务器端未找到对应文件或资源。 |
500 Internal Error | 服务器内部错误 | 服务器内部代码执行报错(如 Java 抛出未捕获异常 NullPointerException 或 10 / 0 除零异常)。 |
3.2 核心响应头信息
| 响应头 (Header) | 说明与应用场景 |
|---|---|
Location | 重定向的目标 URL 地址。配合状态码 302 使用,实现页面自动跳转。 |
Refresh | 定时刷新/跳转。设置格式如 Refresh: 3; url=http://example.com(3秒后自动跳转)。 |
Content-Type | 告知客户端响应内容的 MIME 类型及字符集(如 text/html;charset=UTF-8)。 |
Content-Disposition | 控制浏览器对响应内容的处理方式。触发文件下载时设置为:attachment; filename=demo.zip。 |
Last-Modified | 资源的最后修改时间,配合 If-Modified-Since 与 304 状态码完成缓存判定。 |
| 禁用缓存三件套 | Expires: -1Cache-Control: no-cachePragma: no-cache用于强制浏览器每次都向服务器重新请求最新资源。 |