📘 图解HTTP · 目录

📘 图解HTTP

照着《图解HTTP》([日] 上野 宣 著,于均良 译,人民邮电出版社 · 图灵程序设计丛书,2014 年 5 月第 1 版,250 页,OWASP 日本分会监修;日文原书《今夜ワカルHTTP》)做的自学笔记 —— 本仓库 Web 与网络方向已有四本:计算机网络是教材体系,讲五层模型与典型协议;图解TCP/IP讲协议栈为什么必须分层;Web技术原理讲一个网站前后端怎么拼起来;网络与信息安全讲攻防全景。这一本只讲一个协议——但把它从报文格式、首部字段、状态码一路讲到攻击面,厚度刚好卡在「知道 HTTP 是什么」和「敢改代码上线」之间。全书 11 章 167 篇:第 1 章 13 篇了解 Web 及网络基础(一个网址敲下去,谁在替你做决定);第 2 章 9 篇简单的 HTTP 协议(请求和响应到底长什么样);第 3 章 8 篇 HTTP 报文内的 HTTP 信息;第 4 章 15 篇返回结果的 HTTP 状态码(那一串三位数字是谁定的);第 5 章 6 篇与 HTTP 协作的 Web 服务器(代理、网关、缓存在中间干了什么);第 6 章 60 篇 HTTP 首部(六十多个首部字段各管什么,全书最厚的一章);第 7 章 8 篇确保 Web 安全的 HTTPS(为什么必须再加一层 TLS);第 8 章 8 篇确认访问用户身份的认证(服务器怎么确认「你是你」);第 9 章 9 篇基于 HTTP 的功能追加协议(SPDY 被 HTTP/2 收编之后往哪走);第 10 章 11 篇构建 Web 内容的技术(HTML/CSS/DOM/CGI/Servlet/RSS/JSON);第 11 章 20 篇 Web 的攻击技术(前面十章写的每一条规矩,攻击者是怎么绕过去的)。本课是 原理课:能算的全部真算(报文逐字节长度、首部开销占比、TLS 握手多出几个往返、base64 与摘要的体积变化);能用 Python 真跑的全部真跑(起真 HTTP 服务收发真报文、用 socket 手工拼请求、真解 chunked、真做 Range 请求、真验 ETag 与 If-None-Match、真连一次 HTTPS 抓证书链、真算 HMAC 与 PBKDF2);必须有公网服务器、证书或第二个客户端的写成【📋 实操清单】加【🐍 Python 等价物】。技术事实按 2026 年当下核实过,与 2013 年成书时的差异(SPDY 废弃、HTTP/2 与 HTTP/3、TLS 1.3、X-XSS-Protection 移除、SameSite 迟到等)用【⚠️ 2026 现状】单列。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。

内容来自我的 Obsidian 自学笔记 · 全书 11 章 167 篇已全部写完 · 全书完结 🎉

第一章 了解Web及网络基础

第二章 简单的HTTP协议

第三章 HTTP报文内的HTTP信息

第四章 返回结果的HTTP状态码

第五章 与HTTP协作的Web服务器

第六章 HTTP首部

6.1

HTTP报文首部

四段固定:首行、首部、空行、正文;GET…

⭐⭐阅读全文 →
6.2.1

HTTP首部字段传递重要信息

同一个 URL 靠首部给出四种响应;Va…

⭐⭐阅读全文 →
6.2.2

HTTP首部字段结构

四条规矩:名字不分大小写、值去空白、同名…

⭐⭐阅读全文 →
6.2.3

4种HTTP首部字段类型

通用 9/请求 19/响应 9/实体 1…

⭐⭐阅读全文 →
6.2.4

HTTP/1.1首部字段一览

47 个里一次真跑只碰到 17 个(36…

⭐⭐阅读全文 →
6.2.5

非HTTP/1.1首部字段

Cookie 与 X- 系列都不在 47…

⭐⭐阅读全文 →
6.2.6

End-to-end首部和Hop-by-hop首部

八个固定逐跳字段+Connection…

⭐⭐⭐阅读全文 →
6.3.1

Cache-Control

四族指令:能不能存、存多久、过期怎么办…

⭐⭐⭐阅读全文 →
6.3.2

Connection

close 五次 35.08 毫秒、ke…

⭐⭐阅读全文 →
6.3.3

Date

Date 只认 RFC 1123 加 G…

⭐⭐阅读全文 →
6.3.4

Pragma

只有一个值有意义;出现 Cache-Co…

⭐⭐阅读全文 →
6.3.5

Trailer

尾块必须在首部先声明,且只能配分块;三块…

⭐⭐⭐阅读全文 →
6.3.6

Transfer-Encoding

gzip, chunked 从右往左读…

⭐⭐⭐阅读全文 →
6.3.7

Upgrade

101 之后连接上不再是 HTTP;发…

⭐⭐⭐阅读全文 →
6.3.8

Via

格式「协议版本 代理名」,最左是最近;可…

⭐⭐阅读全文 →
6.3.9

Warning

三段格式带双引号说明;1xx 缓存问题…

⭐⭐阅读全文 →
6.4.1

Accept

Accept 逗号分隔、分号带 q;q…

⭐⭐阅读全文 →
6.4.2

Accept-Charset

字符集只能挑「有对应解码器」的;要 as…

⭐⭐阅读全文 →
6.4.3

Accept-Encoding

gzip;q=0.3, deflate;…

⭐⭐⭐阅读全文 →
6.4.4

Accept-Language

按序打分,最高分胜;没有可接受的语言就退…

⭐⭐阅读全文 →
6.4.5

Authorization

Basic 只是 base64,不是加密…

⭐⭐⭐阅读全文 →
6.4.6

Expect

小正文先回 100 再回 200;要不到…

⭐⭐阅读全文 →
6.4.7

From

From 是给人看的联系方式;服务端通常…

⭐⭐阅读全文 →
6.4.8

Host

HTTP/1.1 唯一必填首部;缺、重复…

⭐⭐⭐阅读全文 →
6.4.9

If-Match

强校验;不匹配回 412 且必须带当前…

⭐⭐⭐阅读全文 →
6.4.10

If-Modified-Since

弱校验,比秒级时间;没改就 304,省…

⭐⭐阅读全文 →
6.4.11

If-None-Match

比指纹不比时间;一出现它就完全盖住 If…

⭐⭐⭐阅读全文 →
6.4.12

If-Range

Range 的守门人;资源没变才给片段…

⭐⭐⭐阅读全文 →
6.4.13

If-Unmodified-Since

与 If-Match 反向:没改才干活…

⭐⭐阅读全文 →
6.4.14

Max-Forwards

代理每跳减一;减到 0 就停;TRACE…

⭐⭐阅读全文 →
6.4.15

Proxy-Authorization

凭据只给第一跳代理;源服务器看不到它,却…

⭐⭐⭐阅读全文 →
6.4.16

Range

bytes 单位不给就忽略;-48 是最…

⭐⭐⭐阅读全文 →
6.4.17

Referer

只管来源不管权限;查询串会原样带出去,五…

⭐⭐阅读全文 →
6.4.18

TE

不发 TE 就没有 Trailer;发了…

⭐⭐阅读全文 →
6.4.19

User-Agent

UA 只供统计与兼容判断;六个客户端实测…

⭐阅读全文 →
6.5.1

Accept-Ranges

报能力不报意愿;bytes 时 206…

⭐⭐阅读全文 →
6.5.2

Age

只有缓存才加;逐跳累加,实测 0 到 2…

⭐⭐⭐阅读全文 →
6.5.3

ETag

按内容算指纹,改一个字就变;带新指纹 3…

⭐⭐⭐阅读全文 →
6.5.4

Location

配 3xx 是去这里、配 201 是东西…

⭐⭐阅读全文 →
6.5.5

Proxy-Authenticate

407 必须带,否则客户端拼不出凭据;和…

⭐⭐阅读全文 →
6.5.6

Retry-After

秒数与 HTTP 日期两种写法;照它睡…

⭐⭐⭐阅读全文 →
6.5.7

Server

报软件名版本系统,一行 43 字节;关掉…

⭐阅读全文 →
6.5.8

Vary

它是缓存 key 的扩展;漏写就把 15…

⭐⭐⭐阅读全文 →
6.5.9

WWW-Authenticate

401 必须带;方案名加 realm 加…

⭐⭐阅读全文 →
6.6.1

Allow

405 必须带;OPTIONS 回 20…

⭐⭐阅读全文 →
6.6.2

Content-Encoding

按施加顺序列、解码倒着来;630 字节…

⭐⭐阅读全文 →
6.6.3

Content-Language

描述实际语言,不是客户端想要的;要法语没…

⭐⭐阅读全文 →
6.6.4

Content-Length

声明 0 实发 50 就留 50 字节污…

⭐⭐⭐阅读全文 →
6.6.5

Content-Location

和 Location 差一个词差一次往返…

⭐⭐阅读全文 →
6.6.6

Content-MD5

十六字节摘要转 24 字符;只防意外损坏…

⭐⭐阅读全文 →
6.6.7

Content-Range

闭区间,0-99 是一百个;416 写…

⭐⭐⭐阅读全文 →
6.6.8

Content-Type

类型加参数决定渲染还是下载;48 字节正…

⭐⭐⭐阅读全文 →
6.6.9

Expires

绝对时刻靠时钟对齐;与 max-age…

⭐⭐⭐阅读全文 →
6.6.10

Last-Modified

秒级精度且认文件时间不认内容;四次请求只…

⭐⭐阅读全文 →
6.7.1

Set-Cookie

一个 cookie 一行不能合并;Max…

⭐⭐⭐阅读全文 →
6.7.2

Cookie

回送只有一行、分号加空格;Path 一换…

⭐⭐⭐阅读全文 →
6.8.1

X-Frame-Options

DENY 与 SAMEORIGIN 靠得…

⭐⭐阅读全文 →
6.8.2

X-XSS-Protection

过滤器已被 Chrome 移除;现在建议…

⭐⭐阅读全文 →
6.8.3

DNT

只认 0 和 1;三重自愿等于没有,20…

⭐⭐阅读全文 →
6.8.4

P3P

CP=ALL 与只写一个标签同为 126…

⭐⭐阅读全文 →

第七章 确保Web安全的HTTPS

第八章 确认访问用户身份的认证

第九章 基于HTTP的功能追加协议

第十章 构建Web内容的技术

第十一章 Web的攻击技术

11.1.1

HTTP不具备必要的安全功能

改个方法改个路径照样 200;服务端只看…

⭐⭐阅读全文 →
11.1.2

在客户端即可篡改请求

价格参数一改从 5900 变 1;服务端…

⭐⭐阅读全文 →
11.1.3

针对Web应用的攻击模式

主动与被动两类;回显 73 字节里那段脚…

⭐⭐阅读全文 →
11.2.1

跨站脚本攻击

三种 payload 不转义全进去,加一…

⭐⭐阅读全文 →
11.2.2

SQL注入攻击

拼接版四问回了 1/0/3/1 行,参数…

⭐⭐⭐阅读全文 →
11.2.3

OS命令注入攻击

和号与管道在本机能接命令,分号与反引号不…

⭐⭐⭐阅读全文 →
11.2.4

HTTP首部注入攻击

一个换行符就多出一行首部;注入后首部从…

⭐⭐⭐阅读全文 →
11.2.5

邮件首部注入攻击

多出的 Bcc 让邮件抄送给别人;过滤后…

⭐⭐⭐阅读全文 →
11.2.6

目录遍历攻击

五个路径朴素版泄了两个;加 realpa…

⭐⭐⭐阅读全文 →
11.2.7

远程文件包含漏洞

参数直接当文件路径,三个全 200;白名…

⭐⭐⭐阅读全文 →
11.3.1

强制浏览

页面上没链接的路径照样 200;加鉴权后…

⭐⭐阅读全文 →
11.3.2

不正确的错误消息处理

详细报错 294 字节泄三样东西,笼统版…

⭐⭐阅读全文 →
11.3.3

开放重定向

next 直接写进 Location;双…

⭐⭐阅读全文 →
11.4.1

会话劫持

换台设备重放会话 ID 照样 200;绑…

⭐⭐⭐阅读全文 →
11.4.2

会话固定攻击

登录不换 ID,攻击者手里那个就成了登录…

⭐⭐⭐阅读全文 →
11.4.3

跨站点请求伪造

用户什么都没点,余额 1000 变 50…

⭐⭐⭐阅读全文 →
11.5.1

密码破解

20 条字典 46 次尝试撞开 2 个账…

⭐⭐阅读全文 →
11.5.2

点击劫持

一行 135 字节的透明 iframe…

⭐⭐阅读全文 →
11.5.3

DoS攻击

四个慢连接把 15 毫秒拖到 4027…

⭐⭐阅读全文 →
11.5.4

后门程序

扫八个路径多出两条 200;guest/…

⭐⭐⭐阅读全文 →