Skip to content

概念卡片:HTTP 协议与报文

一句话机制:HTTP 是在「两点」之间「传输」文字/图片/视频等「超文本」数据的约定和规范,报文 = 起始行 + 头部(key-value)+ 空行 + 实体。它本身无状态,靠 Cookie/Session 补状态;靠状态码五类反馈结果。

报文结构

部分请求报文响应报文
起始行请求方法 + URI + HTTP 版本状态行(版本 + 状态码 + 原因短语)
首部请求头(Host/Accept/User-Agent…)响应头(Content-Type/Location…)
空行分隔头与体
实体body(POST 参数等)body(返回内容)

常见首部字段

字段作用
Host指定服务器域名(一台服务器托管多个网站)
Content-Length本次 body 数据长度(解决 TCP 粘包的 body 边界
ConnectionKeep-Alive 长连接
Content-Type / Accept返回/接受的数据格式
Content-Encoding / Accept-Encoding压缩方式(gzip)

header 边界靠回车换行符,body 边界靠 Content-Length,二者共同解决 TCP「粘包」。

状态码五类

类别含义代表
1xx信息提示
2xx成功200 OK / 204 No Content / 206 Partial Content(断点续传)
3xx重定向301 永久 / 302 临时 / 304 缓存重定向(未修改)
4xx客户端错误400 报文错 / 401 未认证 / 403 禁止 / 404 未找到
5xx服务端错误500 内部错 / 502 网关错 / 503 忙

GET vs POST

GETPOST
语义(RFC)从服务器获取资源按 body 处理资源(新增/提交)
数据位置URL 后(?k=v&…)报文 body
长度限制受 URL 长度限制(浏览器/服务器实现,协议无限制)理论上无限制
字符集只支持 ASCII支持标准字符集
安全/幂等安全 + 幂等(只读)不安全 + 非幂等
可缓存可缓存一般不缓存

「安全」= 不破坏服务器资源;「幂等」= 多次执行结果相同。这是 RFC 语义,实际实现未必遵守(GET 也能删数据)。

CookieSession
位置客户端(浏览器)服务器端
大小≤ 4KB理论无限制
安全不安全(明文)较安全
内容String任意对象
生命周期可设(最长 50 年)默认 20 分钟

无状态解决方式:服务器建 Session 记录状态,通过 Cookie 携带 Session ID 跟踪;Cookie 被禁用时用 URL 重写 附加 Session ID。

不变量(必须成立的约束)

  • HTTP 无状态,状态由 Cookie/Session 补;Cookie 存客户端、Session 存服务端。
  • GET 的「安全/幂等」是 RFC 语义,不是强约束。
  • 状态码 301/302 都要在响应头带 Location 指明跳转目标。

常见误解

  • 以为「GET 数据上限 1024 字节是协议规定」→ 是浏览器/服务器实现限制。
  • 以为「POST 比 GET 安全」→ 只是 body 不显示在地址栏,抓包都是明文,真安全靠 HTTPS。
  • 以为「重定向和转发一样」→ 重定向是客户端行为(两次请求、地址变),转发是服务器行为(一次请求、地址不变)。

关联

最近更新