新人建站操作手册 HTTP状态码

()

HTTP 状态码已经够详尽了,还有什么问题吗?

HTTP 状态码已经够详尽了,还有什么问题吗?


上面的图片出自电影《流浪地球》的一个桥段。高级技术信息安全员李一一下发重启核心发动机的任务,火石的运输安装子任务分配给了刘启和蒂姆,有趣的是,“安装火石”感觉上并不比安装WordPress更难。至少有一小部分是大约相同的,那就是新人建站与蒂姆面对未知领域都一样的彷徨。

WordPress博客系统

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统,具有插件架构和模板系统,是目前因特网上最流行的博客系统。(全自动的犹在耳边哩!)不过新人在建站的时候不免遇到麻烦。我们最多接触的就是关于插件的筛选和运用,可近来总是出现429 Too Many Requests,不知道的以为是疫情哩!作为新人站长有必要恶补HTTP状态码的知识。放心,它并不比火石安装手册来的复杂,新人只需要花几分钟对号入座即可。

HTTP / 1.1标准(RFC 7231)的部分 HTTP状态码

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。
HTTP状态码的官方注册表由互联网号码分配局(Internet Assigned Numbers Authority)维护。
微软互联网信息服务 (Microsoft Internet Information Services)有时会使用额外的十进制子代码来获取更多具体信息,但是这些子代码仅出现在响应有效内容和文档中,而不是代替实际的HTTP状态代码。

刷屏率较高HTTP状态码

1xx消息——请求已被服务器接收,继续处理
这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。[4] 这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。
100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
2xx成功——请求已成功被服务器接收、理解、并接受
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
如: 200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。实际的响应将取决于所使用的请求方法。在GET请求中,响应将包含与请求的资源相对应的实体。在POST请求中,响应将包含描述或操作结果的实体。
200~299:表示成功接收请求并已完成整个处理过程。常用200
3xx重定向——需要后续操作才能完成这一请求
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A→B→C→……→A或A→A),因为这会导致服务器和客户端大量不必要的资源消耗。按照HTTP/1.0版规范的建议,浏览器不应自动访问超过5次的重定向。
300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)
4xx请求错误——请求含有词法错误或者无法被执行
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。
400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)
5xx服务器错误——服务器在处理某个正确请求时发生错误
500~599:服务器端出现错误,常用500
表示服务器无法完成明显有效的请求。[56]这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。这些状态码适用于任何响应方法。
然而为什么还是出现429错误呢?429状态码到底是什么呢?

我们来看Http协议4个新的http状态码:428、429、431、511

1、428 Precondition Required (要求先决条件)
先决条件是客户端发送 HTTP 请求时,必须要满足的一些预设条件。一个好的例子就是 If-None-Match 头,经常用在 GET 请求中。如果指定了 If-None-Match ,那么客户端只在响应中的 ETag 改变后才会重新接收回应。
先决条件的另外一个例子是 If-Match 头,一般用在 PUT 请求上,用于指示只更新但没有被改变的资源。这在多个客户端使用 HTTP 服务时用来防止彼此间覆盖相同内容的情况。
当服务器端使用 428 Precondition Required 状态码时,表示客户端必须发送上述的请求头才能执行该请求操作。这个方法为服务器提供一种有效的方法来阻止 “lost update”问题的出现。
2、429 Too Many Requests (太多请求)
当你需要限制客户端请求某个服务的数量,也就是限制请求速度时,该状态码就会非常有用。在此之前,有一些类似的状态码。例如“509 Bandwidth Limit Exceeded”。
如果你希望限制客户端对服务的请求数,可使用 429 状态码,同时包含一个 Retry-After 响应头用于告诉客户端多长时间后可以再次请求服务。

3、431 Request Header Fields Too Large (请求头字段太大)
某些情况下,客户端发送 HTTP 请求头会变得很大,那么服务器可发送 431 Request Header Fields Too Large 来指明该问题。
我不太清楚为什么没有 430 状态码,而是直接从 429 跳到 431,我尝试搜索但没有结果。唯一的猜测是 430 Forbidden 跟 403 Forbidden 太像了,为了避免混淆才这么做的,天知道!
4、511 Network Authentication Required (要求网络认证)
对我来说这个状态码很有趣,如果你在开发一个 HTTP 服务器,你不一定需要处理该状态码,但如果你在编写 HTTP 客户端,那这个状态码就非常重要。
如果你频繁使用笔记本和智能手机,你可能会注意到大量的公用 Wifi 服务要求你必须接受一些协议或者必须登录后才能使用,这是通过拦截HTTP流量实现的。当用户试图访问网络返回一个重定向和登录,这很讨厌,但是实际情况就是这样的。
使用这些“拦截”客户端,会有一些讨厌的副作用。在 RFC 中提到以下这两个的例子:
如果你在登录Wifi前访问某个网站,网络设备将会拦截首个请求,这些设备往往也有自己的网站图标“favicon.ico”。登录后你会发现,有一段时间内你访问的网站图标一直是Wifi登录网站的图标。
如果客户端使用HTTP请求来查找文档,网络将会响应一个登录页,这样你的客户端就会解析错误并导致客户端运行异常,在现实中这种问题非常常见。
而 511 状态码的提出就是为了解决这个问题。因此,如果你正在编写 HTTP 的客户端,你最好还是检查 511 状态码以确认是否需要认证后才能访问。
这是文章Http协议4个新的http状态码:428、429、431、511的原出处:https://www.cnblogs.com/willem-xin/

这篇文章有用吗?

点击星星为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票! 成为第一位评委。

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

1 comment

  1. […] wordpress.org网站访问出现“429 Too Many Requests”错误已经不是一天两天了,最初我们以为是WordPress服务器问题,后来才发现只有中国用户访问 wordpress.org 时才会出现这种“429 Too Many Requests”错误。除此之外,在网站后台升级更新WordPress版本或插件也都会出现“更新失败:下载失败,Too Many Requests”的错误。 国内访问wordpress.org其下所有页面时出现的错误提示: […]

发表评论

电子邮件地址不会被公开。