HTTP协议
HTTP协议概览
HTTP(Hyper Text Transfer Protocol,超文本传输协议)是浏览器与服务器通信的核心协议,基于 TCP/IP 协议传输数据(如文件、图片、查询结果等)。
核心架构
- HTTP 是典型的 C/S(Client-Server,客户端-服务器)协议。
- 客户端(用户代理):通常是浏览器,也可以是爬虫等其他程序。
- 通信流程:客户端发送请求(request)→ 服务器处理后返回响应(response)。
- 中间实体:请求与响应之间可能存在 proxies(如网关、缓存等)。
HTTP的特点
简单快速
- 客户端请求仅需传递 请求方法 和 路径,协议逻辑简单。
- 常用请求方法:GET、PUT、POST、HEAD 等,每种方法定义了通信类型。
- 服务器程序规模小,通信效率高。
灵活
- 允许传输任意类型的数据对象,通过请求头中的
Content-Type标识数据类型。
无连接
- 每次连接仅处理一个请求,服务器响应后即断开连接,节约服务器资源。
- 底层依赖可靠的传输层协议(通常是 TCP),但 TCP 连接不属于 HTTP 协议范畴。
- 注:HTTP 不强制要求底层是 TCP,仅要求传输可靠(或返回错误)。
无状态
- 协议本身不保存请求与响应之间的通信状态,每次请求都是独立的,无依赖关系。
- 无状态的优缺点:
- 优点:协议简单、轻量,易于扩展。
- 缺点:无法直接支持连续交互(如电商购物车多步骤操作)。
- 解决方案:通过 HTTP 头部扩展(如 Cookies)创建会话,共享上下文信息,实现状态保持。
HTTP报文
HTTP 通信的本质是:按协议规范封装 TCP 数据段为 HTTP 数据包,或拆解接收的 HTTP 数据包。
典型HTTP请求报文示例
GET /repo/boa-0.100.9.tgz HTTP/1.1\r\n
Range:bytes=0-\r\n
Host:www.boa.org\r\n\r\n
请求报文结构
- 请求行:以
\r\n结束,格式为「请求方法 + 空格 + URL + 空格 + 协议版本」。 - 请求头部:多个头部字段组成,每个字段格式为「头部字段名称 + :(冒号) + 值 + \r\n」。
- 空行:以
\r\n表示,分隔请求头部与请求包体。 - 请求包体:可选,用于传递请求数据(如 POST 方法的表单数据)。
格式规范要点
- 请求行、每个头部字段均以
\r\n结尾。 - 整个请求头部的结束需额外添加一个
\r\n。 - 字段分隔符、换行符等格式固定,需严格遵循。
知识:HTTP核心补充
常用HTTP请求方法详解
| 方法 | 核心用途 | 特点 |
|---|---|---|
| GET | 获取服务器资源(如网页、文件) | 参数拼接在 URL 中,长度有限,可缓存 |
| POST | 向服务器提交数据(如表单、上传) | 参数在请求包体中,长度无限制,不可缓存 |
| PUT | 替换服务器指定资源 | 幂等(多次请求结果一致) |
| HEAD | 获取响应头部(无响应包体) | 仅返回头部信息,用于验证资源存在性 |
| DELETE | 删除服务器指定资源 | 幂等 |
| PATCH | 部分更新服务器资源 | 仅修改资源部分字段,区别于 PUT 全替换 |
| OPTIONS | 询问服务器支持的请求方法 | 用于跨域请求预检(CORS Preflight) |
HTTP状态码分类及常见类型
状态码用于表示服务器对请求的处理结果,分为 5 大类:
- 1xx(信息性状态码):请求已接收,继续处理(如 100 Continue)。
- 2xx(成功状态码):请求正常处理完成(如 200 OK、201 Created)。
- 3xx(重定向状态码):需要客户端进一步操作(如 301 永久重定向、302 临时重定向、304 Not Modified)。
- 4xx(客户端错误状态码):请求存在错误(如 400 Bad Request、401 未授权、403 禁止访问、404 资源未找到)。
- 5xx(服务器错误状态码):服务器处理请求失败(如 500 服务器内部错误、502 网关错误、503 服务不可用)。
HTTP与HTTPS的核心区别
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,无加密,易被窃听篡改 | 基于 TLS/SSL 加密,传输安全 |
| 传输层 | 直接基于 TCP | TCP + TLS/SSL 协议层 |
| 端口 | 80 | 443 |
| 证书 | 无需证书 | 需 CA 颁发的数字证书,验证服务器身份 |
| 性能 | 无加密开销,速度较快 | 加密解密耗时,性能略低 |
常见HTTP头部字段
请求头字段
- Host:指定服务器域名(如
Host: www.boa.org),必选字段。 - User-Agent:标识客户端类型(如浏览器版本、爬虫名称)。
- Accept:指定客户端可接收的响应数据类型(如
Accept: text/html)。 - Cookie:携带会话信息,实现状态保持。
- Content-Type:请求包体的数据类型(如
application/x-www-form-urlencoded、multipart/form-data)。
响应头字段
- Content-Type:响应包体的数据类型(如
text/json、image/png)。 - Set-Cookie:服务器向客户端设置 Cookie。
- Cache-Control:控制缓存策略(如
max-age=3600表示缓存 1 小时)。 - Location:重定向目标 URL(配合 3xx 状态码使用)。

浙公网安备 33010602011771号