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

请求报文结构

  1. 请求行:以 \r\n 结束,格式为「请求方法 + 空格 + URL + 空格 + 协议版本」。
  2. 请求头部:多个头部字段组成,每个字段格式为「头部字段名称 + :(冒号) + 值 + \r\n」。
  3. 空行:以 \r\n 表示,分隔请求头部与请求包体。
  4. 请求包体:可选,用于传递请求数据(如 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-urlencodedmultipart/form-data)。

响应头字段

  • Content-Type:响应包体的数据类型(如 text/jsonimage/png)。
  • Set-Cookie:服务器向客户端设置 Cookie。
  • Cache-Control:控制缓存策略(如 max-age=3600 表示缓存 1 小时)。
  • Location:重定向目标 URL(配合 3xx 状态码使用)。
posted @ 2025-12-12 08:38  Jaklin  阅读(74)  评论(0)    收藏  举报