授权与合规声明
本文全部操作对象均为自建隔离靶场(本机容器或隔离虚拟机),涉及安全测试的环节必须以取得合法授权为前提。未经授权的渗透测试违反《中华人民共和国网络安全法》与《刑法》相关条款,须承担相应法律责任。本文只讲环境配置、版本对照与靶场隔离,不含任何攻击步骤、利用载荷与绕过手法,请勿将文中环境指向任何非自有系统。
一、三个数字先决定你往哪一边看
1.1 地址敲下去,回来的是一个三位数
在自建靶场里把页面打开,最容易被跳过的一行信息,就在响应头的最前面:一个三位数字,后面跟一小段英文。它不解释原因,也不给建议,它只做一个判断——这一次请求,服务端那边是怎么看的。
多数人是在"页面不对劲"的时候才回头注意到它。页面是空白的、形状不对的、或者跳到了另一个地址,这时候你翻出那一行,看到三个数字,然后卡住:接下来该去翻自己写的那段地址,还是去翻服务端的配置?
这个"卡住"的状态,就是本文要解决的全部问题。那三个数字不是一句可有可无的提示,它是服务端对被请求的那个动作给出的分类答复。读法对了,方向就先对了一半。
1.2 它描述的是答复,不是你被怎么样了
先纠正一个很常见的误读。有人在别处看到某个数字,被告知它意味着"你的请求被设备拦下来了"。这类说法在本文取材的两份一手材料里找不到依据。
本文只依据两份材料:一份是 IANA 的官方状态码注册表,一份是 RFC 9110。在这两份材料里,每一个码的归属都写得很确定——它归在哪一类、叫什么名字、指向 RFC 的哪一小节。注册表里没有把任何一个码分配给"某个中间设备拦截了你"这种归属。所以看到一个不熟悉的数字时,正确的动作不是替它编一个解释,而是去注册表里查它登记成了什么。
这句话会贯穿全文:状态码是登记在案的条目,不是形容词。
1.3 本文只读,不构造请求
先把边界说明白:本文只讲"已经发生的返回该怎么读",不讲"怎么让某个码出现"。凡是需要构造请求去把某个码凑出来的动作,本文一概不写。文中出现的命令一律是只读的,只看响应头,不产生任何改变,同时不在本机实测,统一加标注。
⚠️代码待验证
curl-I"http://<自建靶场地址>/"这条命令只做一件事:把响应头取回来给你看。它不发送会改变状态的请求,也不动服务端上的任何东西。之所以要专门强调这一点,是因为同一类工具既能只读也能做别的——你选哪一种用法,决定了这件事是在"观察"还是在"动手"。本文的每一次演示都停在观察这一侧。
二、五类,五句官方定义
2.1 官方逐字定义长什么样
IANA 那份注册表在最上面把五个类别各自定义了一遍。原文照抄如下,英文逐字,未作改动;右侧是中文说明。
| 官方逐字定义 | 中文说明 |
|---|---|
1xx: Informational - Request received, continuing process | 信息类:请求已经收到,处理还在继续 |
2xx: Success - The action was successfully received, understood, and accepted | 成功类:这个动作被成功接收、理解并接受 |
3xx: Redirection - Further action must be taken in order to complete the request | 重定向类:要完成这个请求,还必须再采取进一步的动作 |
4xx: Client Error - The request contains bad syntax or cannot be fulfilled | 客户端错误类:请求本身含有坏的语法,或者无法被满足 |
5xx: Server Error - The server failed to fulfill an apparently valid request | 服务端错误类:服务端没能满足一个看起来有效的请求 |
这五句放在一起看,有一个很值得注意的共同点:它们描述的都是"这次请求处在什么状态",没有一句在描述"谁对谁错"。中文说明里出现的"客户端错误""服务端错误"是类别名本身带的词,是登记时就这么命名的,不是额外给出的评价。
初学阶段最容易做的一件事,就是把类别名当成判词——看到带着"错误"字样的类,就觉得是出问题了。回到原句上就不难发现,官方给的是一句状态描述:请求收到了、动作被接受了、还得再走一步、请求无法被满足、服务端没能满足。你要做的是把眼前的这三个数字对回其中一句,而不是先给它加上情绪。
2.2 第一位定类别,后两位定具体那一个
五个类别是按第一位数字分的,这一点在定义里已经写死了:1 开头就是第一句,5 开头就是第五句。所以读到任何一个三位数,你都能立刻完成第一次降维:不用认全它,先认第一位。
⚠️代码待验证
第一位数字 → 类别(上面那五句里的一句) 后两位数字 → 这一类里的具体那一个码 例:读到 4xx 里的某个码 第一步:第一位是 4,落进"请求含有坏的语法或无法被满足"这一类 第二步:再去看后两位是哪一条具体登记这个拆位动作看起来简单,但它是本文后面所有判断的地基。因为类别那一层,就已经把方向分好了——这一点第三章展开。
顺带说一句类别这一层的稳定性。具体那一个一个的码是会增补的:注册表里既有早就登记在那里的码,也有后来从别的标准登进来的码;而第一位对应的那五个类别,是写在表头的那五句。所以在还没有把握的时候,先只用到第一位,是相对更稳的那一步。
2.3 见到一个码,先记五格
给一个可以带走的动作:以后每次遇到一个不认识的码,先按下面这五格把它记下来,能填几格填几格。
⚠️代码待验证
状态码:______ 第一位:______ → 类别:______ 注册表里的名称:______ 指向 RFC 9110 的哪一小节:______ 这次请求里,是谁在回应:______最后两格最容易空着。前四格都能在注册表里查到,唯独最后一格要靠你自己判断这次请求经过了什么。把查得到的先查实,把查不到的明确标成"还没弄清",这两件事分开做,能挡掉后面成片的瞎猜。
三、第一位数字为什么能把方向分成两半
3.1 4xx 那一句,落点在"请求"上
把 4xx 的官方定义单独拎出来,逐字是:
4xx: Client Error - The request contains bad syntax or cannot be fulfilled
重点在后半句。它说了两件事:请求本身含有坏的语法,或者请求无法被满足。注意这个"或者"——它没有说请求一定有问题,只说"不能满足它"。也就是说,4xx 只表态了一件事:问题这一侧被放在请求上。它没有说请求写得难看,也没有说请求带着攻击意图,更没有说请求被谁拦下来了。
3.2 5xx 那一句,落点在"看起来有效"上
再看 5xx,逐字是:
5xx: Server Error - The server failed to fulfill an apparently valid request
这一句里最值得多看两眼的词是apparently valid——看起来有效。它说明的是顺序:请求先是被当作有效请求收下了,然后服务端这边没能把它办成。责任落在"没能满足"这个动作上,而不是落在"请求不合格"这个判断上。
两句话摆在一起,差别就出来了:一个说请求这一侧有问题或者满足不了,另一个说请求看起来没问题但服务端没办成。
3.3 分成两半之后,先查哪一边
于是你手上就有了两条方向完全不同的路:
| 类别 | 官方定义里的落点 | 你要先看的那一侧 |
|---|---|---|
| 4xx | The request contains bad syntax or cannot be fulfilled | 我这一次发出去的请求 |
| 5xx | The server failed to fulfill an apparently valid request | 服务端那一侧的运行状态 |
这就是"第一位数字把方向分成两半"的具体含义。它不是给你一个结论,而是给你一个排序:先查哪一侧,后查哪一侧。
⚠️代码待验证
4xx → 先把"我这一次的请求"过一遍: 地址对不对、方法对不对、带上来的东西对不对 5xx → 先把"服务端那一侧"过一遍: 它当时在不在正常状态、它依赖的东西当时在不在 两半都不是结论,只是顺序。 查完一半没有发现,再去看另一半,不要两边同时乱翻。这里必须补一句免责,免得被误读成"4xx 就一定是你错了"。4xx 的官方定义里有一半说的是"请求无法被满足"——满足不了和写错了不是一回事。一个完全符合规范、语法干净的请求,照样可能落进 4xx,因为规则要求的那样东西在当时不成立。所以要记住的是归属方向,不是谁的责任判决。
四、两组最容易混的码
4.1 401 与 403:两个码,不是一种情况的两种说法
第一组是 401 和 403。它们在注册表里是两条独立的登记,各自有名字、各自指向 RFC 9110 的不同小节:
| 码 | 注册表里的名称 | 指向 RFC 9110 的小节 |
|---|---|---|
| 401 | Unauthorized | 15.5.2 |
| 403 | Forbidden | 15.5.4 |
两个名字是两个不同的词,两个小节号也是两个不同的号。这里要提醒的是:401 登记的名称字面是Unauthorized,而它实际想要表达的那个位置,和"没有认证"这件事绑在一起;403 登记的名称是Forbidden,落点在"不被允许"。名称只是登记用的标签,你可以直译它,但不能把直译当成完整定义——完整定义写在它们各自指向的那一小节里。
混用的代价很实在:这两个码指向服务端的两处不同判断,如果把它们当成"一回事的两种写法",你排查时就会在错误的那一侧反复翻。
4.2 404 与 405:资源不在,和方法不被接受
第二组是 404 和 405。同样,两条独立登记。404在注册表里的名称是Not Found,指向 RFC 9110 的 15.5.5 小节;405的名称是Method Not Allowed,指向 15.5.6 小节。一个名字带的是"没找到",另一个带的是"这个方法不被允许"。
从名称上直译,一个说的是"没找到",一个说的是"这个方法不被允许"。这两句话问的是两个不同的问题:前者问的是"你要的那个东西在不在",后者问的是"你要对它做的那个动作,在这个位置上允不允许"。
它们最容易混的地方在于现象相似:页面都不给你想看的内容。但归属不同——一个落在"资源",一个落在"方法"。所以当你在这两个码之间摇摆时,不要盯着页面看,去看你这次用的是哪个方法、打的是哪个地址。这两条信息一对上,码就分开了。
4.3 顺带把一个改名说清楚:413 的现行名称
第三处容易踩的坑不是两个码的混淆,而是一个码改了名字。
413在注册表里的现行名称是Content Too Large,它指向 RFC 9110 的 15.5.14 小节。你如果在旧资料里见过它另一个写法,那是旧写法;截至 2026-09-27,注册表上登记的是Content Too Large。
这条提醒的意义不在这个码本身,而在于它证明了一件事:注册表是会变的。一个名字可以被改,一个码可以被废止,一段区间可以被腾出来。所以"我记住的那个版本"永远只是某一时刻的版本,需要的时候要回到表上确认一次。
把本章这五条放成一张表,顺手记一下:
| 码 | 注册表里的名称 | 指向 RFC 9110 的小节 | 它和谁容易混 |
|---|---|---|---|
| 401 | Unauthorized | 15.5.2 | 403 |
| 403 | Forbidden | 15.5.4 | 401 |
| 404 | Not Found | 15.5.5 | 405 |
| 405 | Method Not Allowed | 15.5.6 | 404 |
| 413 | Content Too Large | 15.5.14 | 旧名称 |
五、这是一张活着的表
5.1 登记流程是 IETF Review,别的标准也往里放码
这份注册表既然是官方登记的,那它就不是一次写完就封存的清单。它的登记走的是IETF Review流程,而且是可扩展的:除了 RFC 9110,别的标准也可以往里面登记自己的码。
截至 2026-09-27,表里就有这样几条来自其他标准的码:
| 码 | 注册表里的名称 | 来自哪份标准 |
|---|---|---|
| 207 | Multi-Status | RFC 4918 |
| 429 | Too Many Requests | RFC 6585 |
| 511 | Network Authentication Required | RFC 6585 |
这三条放在这里,是在回答一个很实际的问题:为什么有些码,你在讲 HTTP 基础的那份材料里从头翻到尾也找不到?因为它本来就不是从那里登进来的。它是被别人按同一个登记流程放进同一张表的。
5.2 表里留着成段的空白
第二个会让你"翻不到"的原因是空白。表里明确标着Unassigned的区间不止一小段,而是一整片:
| 标记 | 含义 | 注册表里的例子 |
|---|---|---|
Unassigned | 这一段没有分配给任何码 | 105-199、227-299、309-399、419-420、452-499、512-599 |
(Unused) | 留着的、明确不用的码 | 306、418 |
(OBSOLETED) | 已废止的码 | 510 Not Extended |
这三种标记其实是三件不同的事:Unassigned是"这里没东西",(Unused)是"这里有位置,但登记上写着不用",(OBSOLETED)是"曾经是码,现在废止了"。三者都指向同一个结论——这张表上有大量位置是没有含义的,也有位置的含义被主动取消过。
⚠️代码待验证
Unassigned → 没分配,不表示"待解释" (Unused) → 留着的码,不表示"能用" (OBSOLETED) → 废止的码,不表示"还在生效" 三种都不是"你猜的那个意思"。5.3 所以不认识某个码,是很正常的事
把这一章的三张表合起来看,会得到一个挺让人松口气的结论:你不认识某个码,很可能不是因为你学得少,而是因为那个位置本来就没有含义,或者它的含义不在这份 RFC 里。
这就把读码这件事的姿态定下来了:
- 认识的码,按登记的名称和它指向的小节去读;
- 不认识的码,去注册表里查它,而不是替它编一个说法;
- 查完仍然对不上的,明确记成"还没弄清",不要拿一个听起来顺耳的解释填进去。
最后这条最难做到,但也最重要。在状态码这一层,猜错的成本比留空高得多——因为猜错会把你引到完全相反的那一侧去翻。
还有一种情形值得单独提一句:有些数字看起来很像某个你认识的码,只差一位。这时候不要顺着"相似"去推——注册表是按条目登记的,不是按形状登记的,差一位就是另一条,甚至可能正好落在那片标着没分配的区间里。形状上的相似,在这里不构成任何证据。
配套资料:把这份注册表的五个类别、常见码的名称与小节号、以及本文提到的那几种登记标记整理成了一页可以随手查的速查表,放在资料包里,扫码即可获取:
六、最反直觉的一条:304 不在成功那一类
6.1 200 和 304,被分在了两处
如果让你猜,一个"东西没变,不用重新传"的结果,应该归进成功那一类还是别的类?直觉多半会选成功。但注册表把它们分在了两处:
| 码 | 注册表里的名称 | 归在哪一类 | 指向 RFC 9110 的小节 |
|---|---|---|---|
| 200 | OK | 2xx(成功类) | 15.3.1 |
| 304 | Not Modified | 3xx(重定向类) | 15.4.5 |
200 在成功类里,这符合直觉。而304 Not Modified——它属于重定向这一类(3xx),不属于成功这一类。这是本文最想让你记住的一条,因为它最容易顶着你原有的直觉。
6.2 为什么它会落在重定向这一类
回到第五章开头那五句官方定义。3xx 那一句逐字是:
3xx: Redirection - Further action must be taken in order to complete the request
关键在Further action must be taken——要完成这个请求,还必须再采取进一步的动作。
现在再看 304 这个结果的样子:服务端告诉客户端"你要的那个东西没变"。这句话本身并没有把请求"完成"掉,它是在提示下一步——既然没变,客户端接下来要做的动作就和正常取回内容不一样。归类是按"请求有没有走到终点"来分的,不是按"这次沟通顺不顺利"来分的。沟通很顺利,但请求还没走完,所以它落在 3xx。
⚠️代码待验证
curl-I"http://<自建靶场地址>/"用这个只读动作取回响应头时,你要找的就是最前面那三个数字。如果你判断某个码的归属时把 200 和 304 归成了同一类,那么 3xx 的那句定义就该再读一遍——它是按"还要不要走下一步"来分类的。
6.3 由此得到的一条读法
把这一章压成一句话:
判断一个码归在哪一类,不看结果顺不顺利,看请求有没有走完。
这条读法的价值不只在 304 这一处。它其实是在校正一个更底层的习惯:我们习惯用"好/坏"给数字贴标签,而注册表用的是"状态"。2xx 是"动作被接受",3xx 是"还得再走一步",这两个描述之间没有褒贬,只有进度的差别。把这个前提换过来,你在 4xx、5xx 上的判断也会跟着稳一些——它们同样是在描述状态,不是在下判决。
这里还有一个副产品:既然 3xx 那句话是在说"还得再走一步",那么落进这一类的就不止 304 一个。地址被换到别处、需要客户端再走一趟的结果,也都在这一格里。它们的共同点不是"结果长得像",而是同一个判断:这个请求还没走完。
七、读响应时,你真正要看的是两样东西
7.1 官方那一句口径
RFC 9110 里有一句话,把客户端读响应这件事说得非常干净,逐字是:
The client examines received responses to see if its intentions were carried out, determining what to do next based on the status codes and content received.
翻成中文:客户端检查收到的响应,看看自己的意图有没有被执行,并依据收到的状态码与内容来决定下一步做什么。
这句话里有两个词被并列放在了一起:状态码和内容。也就是说,读响应不是只看那三个数字,也不是只看页面里写了什么,而是两样一起看。状态码告诉你这一层处在什么状态,内容告诉你这一层之外还有什么信息。这也是前面几章反复强调"不该替码猜意思"的原因——猜出来的意思会盖住你本来该从内容里读到的东西。
7.2 一张读码顺序表
把全文的读法收成一张顺序表,下次遇到数字就照着走。
| 顺序 | 看什么 | 这一格回答的问题 |
|---|---|---|
| 1 | 那个三位数本身 | 这次请求处在什么状态 |
| 2 | 第一位数字 | 它归在哪一类,要往哪一侧看 |
| 3 | 注册表里这个码的名称 | 它登记的名字是什么(不是我以为的名字) |
| 4 | 它指向的 RFC 9110 小节 | 完整定义在哪一段 |
| 5 | 响应里的内容 | 意图有没有被执行,下一步做什么 |
走到第三步时如果发现表上没有这一条,就停在第三步——回去看表本身,别往下猜。
7.3 本文使用限制
写到这里,把本文的边界交代清楚,免得被误读:
- 本文只做"已经发生的返回该怎么读"这一件事,不给任何构造请求去触发某个码的做法。文中出现的命令一律是只读的观察动作,且均未在本机实际运行,一律标了"代码待验证",请在你自己的隔离环境里核实之后再决定要不要用。
- 本文不重讲请求在链路上经过的过程、不重讲端口与访问路径那几层——它们各自属于别的轴,本文只在必要处一句话带过,不重复展开。
- 本文不含任何攻击步骤、利用载荷、绕过手法、具体报错文本与量级数字,也不把任何一个码解释成被某个设备拦截。
- 文中所有官方口径均照抄原文:英文逐字引用并附中文说明,核验日期逐条见附表 A。这注册表与 RFC 是会更新的,本文引用的是核验日当天看到的内容,动手前请以你手上那一份为准。
- 本文对码的归类只依据注册表登记的类别与名称;至于某个码在某个具体系统里由哪一段程序发出,超出了本文的取材范围,本文不作推断。
配套资料:第七章这张读码顺序表,连同五个类别的官方定义原文、两组易混码的对照,一并放在资料包里,扫码即可获取:
附表 A:本文引用事实与官方出处对照表
核验日期逐条标注于下表;英文原文逐字引用,未作改写。注册表与 RFC 会更新,建议隔一段时间按同一出处复检一次。
| # | 本文写出的事实(照官方口径) | 官方一手出处 | 核验日期 | 本文位置 |
|---|---|---|---|---|
| 1 | 1xx: Informational - Request received, continuing process | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 二、2.1 |
| 2 | 2xx: Success - The action was successfully received, understood, and accepted | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 二、2.1 |
| 3 | 3xx: Redirection - Further action must be taken in order to complete the request | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 二、2.1、六、6.2 |
| 4 | 4xx: Client Error - The request contains bad syntax or cannot be fulfilled | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 三、3.1、3.3 |
| 5 | 5xx: Server Error - The server failed to fulfill an apparently valid request | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 三、3.2、3.3 |
| 6 | 注册表按 IETF Review 流程登记、是可扩展的(除 RFC 9110 外,其他标准也可登记自己的码) | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.1 |
| 7 | 207 Multi-Status来自 RFC 4918 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.1 |
| 8 | 429 Too Many Requests、511 Network Authentication Required来自 RFC 6585 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.1 |
| 9 | 注册表中标为Unassigned的区间:105-199、227-299、309-399、419-420、452-499、512-599 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.2 |
| 10 | 注册表中标为(Unused)的码:306、418 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.2 |
| 11 | 注册表中510 Not Extended标为(OBSOLETED) | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.2 |
| 12 | 200 OK指向 RFC 9110 第 15.3.1 节 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 六、6.1 |
| 13 | 301 Moved Permanently→15.4.2、302 Found→15.4.3、304 Not Modified→15.4.5 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 六、6.1、4.1 |
| 14 | 400 Bad Request→15.5.1、401 Unauthorized→15.5.2、403 Forbidden→15.5.4、404 Not Found→15.5.5、405 Method Not Allowed→15.5.6、408 Request Timeout→15.5.9 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 四、4.1、4.2 |
| 15 | 413的现行名称是Content Too Large,指向 RFC 9110 第 15.5.14 节 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 四、4.3 |
| 16 | 429 Too Many Requests指向 RFC 6585 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 四、4.3、五、5.1 |
| 17 | 500 Internal Server Error→15.6.1、502 Bad Gateway→15.6.3、503 Service Unavailable→15.6.4、504 Gateway Timeout→15.6.5、505 HTTP Version Not Supported→15.6.6 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 三、3.3、七、7.2 |
| 18 | The client examines received responses to see if its intentions were carried out, determining what to do next based on the status codes and content received. | RFC 9110 HTTP Semantics(IETF 标准,2022 年 6 月)— https://www.rfc-editor.org/rfc/rfc9110.html | 2026-09-27 | 七、7.1 |
| 19 | 注册表页面标注 Last Updated 2025-09-15,其 Reference 指向 RFC 9110 第 16.2.1 节 | IANA HTTP Status Code Registry — https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml | 2026-09-27 | 五、5.1 |
附表 B:术语速查表
| 术语 | 是什么 | 为什么在本文里重要 |
|---|---|---|
| 状态码层 | 服务端把处理结果交回客户端时给出的那三位数字这一层 | 它不解释原因,只做分类,所以读法比记忆更要紧;本文整篇都在讲这一层 |
| 类别 | 由第一位数字决定的五个大类:1xx 到 5xx | 第一位一读出来,排查方向就先分好了 |
| IANA 注册表 | IANA 维护的官方 HTTP 状态码登记表 | 码的名称、类别、指向的小节都以它为准;"认不认识"的裁决权在它这里 |
| RFC 9110 | 讲 HTTP 语义的 IETF 标准 | 注册表里每个码都指向它的一小节,完整定义在那里 |
| IETF Review | 注册表用的登记流程 | 它说明这张表是可扩展的,别的标准也能往里面登记 |
| Unassigned | 注册表上没分配给任何码的区间 | 翻不到某个码,可能只是这一位没分配,不是你没学会 |
| (Unused) | 留着的、明确不用的码 | 有位置不等于有含义 |
| (OBSOLETED) | 已废止的码 | 位置的含义可以被取消,"我以前见过"不等于现在还生效 |
| 现行名称 | 注册表上此刻登记的名称 | 413的现行名称是Content Too Large,老写法不作数 |
| 只读观察动作 | 只取回信息、不产生任何改变的动作 | 本文给出的全部命令都属于这一类 |
| 核验日期 | 引用的官方口径是哪一天看到的 | 表与 RFC 会更新,写明日期才能判断这条口径还成不成立 |
写在最后:这篇用到的资料
写这篇文章时,我把 IANA 那份注册表从头到尾过了一遍——五个类别的定义、常见码的名称与小节号、还有成片标着没分配和已废止的位置,又回头对照了 RFC 9110 里讲客户端读响应的那一句,把"看到一个数字该往哪边看"理成了一张顺序表,顺手也整理了几份配套的东西:
- 状态码速查表:五个类别的官方定义原文、常见码的名称与 RFC 9110 小节号,以及登记表上那几种标记的含义
- Web 安全学习路线图:从基础打牢到安全管理,四个阶段各学什么
- 常用靶场清单:每个靶场练什么、适合哪个阶段
资料是我自己整理的,放在下面这个码上,扫码即可获取:
添加时备注「靶场」,优先通过。
拿到之后建议先看状态码速查表那一份——先把"认识的码"和"不认识的码"分开,不认识的直接回注册表查,比凭着印象猜一个意思要稳得多。