肯定很多人都听说过HTTP 404 302 500等代码,那这些代码都代表什么?如何利用这些错误代码来发现你的WEB系统问题,已经最后如何解决修复这些问题。本文中,虫虫就和大家一起聊聊HTTP状态码,并告诉大家对常见的HTTP错误代码问题,及其修复方案。
HTTP 状态码是一个客户发出请求时候,WEB服务器返回给客户的一个状态回应,常见HTTP状态有以下五类:
1.信息代码:1xx,
2.成功代码:2xx,
3.重定向:3xx,
4.客户端错误:4xx,
5.服务器错误:5xx
其中,我们需要关注的是客户端和服务器端错误代码,即4xx和5xx代码以及这些代码的常见解决方案。
客户端错误,从400到499编码的客户端错误是由客户端引起的某些错误导致的,该客户端是Web浏览器、curl命令或postman等其他服务器测试软件发出的请求等。
服务器错误,当服务器发生错误或服务器识别出无法处理请求时,将发送代码为500到599的服务器错误。
此代码表示服务器无法理解请求,因为语法无效。这是因为发送到服务器的请求具有无效语法。
解决:
检查HTTP请求中可能发生的语法错误,确保请求的URL或者Post语法没有错误。
尝试清除浏览器的cookie和缓存后再试。
尝试更新或更改浏览器。
有可能浏览器版本太老或其他问题。
未经授权的错误意味着访问系统需要身份验证的,而在请求中没有给予正当的认证凭据(密码,token等)。这意味着服务器需要身份验证密码才能访问所请求的文件或者资源。这也意味着服务器无法将您识别为具有正确身份验证的用户。
在这种情况下,未提供用户名和/或密码或未正确提供给服务器。
解决:
提供正确的身份验证或者凭据(账号或者token等)。
在这种情况下,客户端无权访问内容。这种情况下服务器识别客户端是谁,并且用户已向服务器发出了正确的请求,但服务器拒绝对访问所请求的文件给出正确的响应。与此处的401不同,服务器知道客户端的身份。
解决:
当用户没有访问所请求资源的权限时,通常会发生403错误。通常可能是客户端IP、Agent等被WEB服务器拒绝访问了,比如触发了WAF,反扒策略等,这时候可以通过修改Agent内容,更换IP等来解决。
HTTP错误代码404未找到意味着用户能够与服务器通信,并且服务器也愿意将资源发送回用户,但是它无法找到用户请求的资源。
如果你使用的是浏览器,则可能还意味着服务器无法识别该URL。或者正如我在上面所述,它也可能意味着URL有效,但是服务器上确实不再存在该资源。
这是Web上最容易识别的错误,最常见的错误之一,有很多个性化的404报错页面,甚至用一些公益页面来作为404报错页面。
解决:
如果偶尔收到404错误,请在排除故障时提出一些问题。
是否犯了类型错误。
文件是否存在于服务器上,或者已移动或已删除?
要查询的目录中是否有请求的文件。
对少数404可不必在意,如果访问中存在大量的固定404请求,则需要排查是否有些导航页面(比如index.html)页面中有错误的设置,设置了不存在的url链接。
当服务器关闭连接时会发送此响应,因为客户端需要很长时间才能发送请求。当客户端连接速度较慢或服务器上存在巨大负载时,会发生这种情况。
请注意,即使没有客户端先前的任何请求,此错误响应也经常由服务器发送。这意味着服务器希望关闭此未使用的连接。
现代任何现代浏览器(例如chrome和firefox)都使用预连接来加速Web,如果它长时间未使用,则服务器会断开连接。即使没有发送消息,服务器也经常断开连接。
用户在给定的时间内发送了太多请求。这通常作为速率限制措施来完成。通常,免费API的时间提供者(例如:免费天气API等)限制了免费用户访问数据的速率。
解决
等待一段时间,然后重试或阅读与API访问限制有关文档来解决。
服务器遇到错误,它不知道如何处理它。常常会返回HTTP状态码5xx类型的以及更具体的错误。
导致此类错误的最常见原因是服务器配置错误。
出现这种报错,要去查询服务器详细的错误日志,或者相关应用服务器的日志(比如PHP,java日志)来得到详细原因,在具体问题具体解决。
服务器在工作以获取处理请求所需的另一台服务器的响应(接口,数据库等)时得到的响应无效。
客户端发送请求的服务器是代理服务器(nginx反带),需要从另一台服务器获取数据。
最常见的原因是服务器配置错误。缺少软件包或不正确的负载平衡服务器可能会导致这些错误。
比如常见的nginx 502问题,就是反带的后端服务器有问题了,访问不了了,会报502错误。
服务器无法处理请求可能的原因可能是服务器由于某些其他原因而处于维护或关闭状态,或者服务器过载并且无法处理请求。
如果服务器未关闭,则可能是服务器资源(如CPU ram或带宽)无法处理流量。需要重新配置任一服务器以通过增加资源来允许更多流量,或者必须进行一些其他优化。
注意:如果你在重载时间或其他原因发送此响应,则还应发送用户友好的html页面或消息,说明问题以及解决问题的估计时间范围,可以使用Retry-After:HTTP头来说明。
在这些临时条件下,还应注意不要发送与缓存相关的标头。
当服务器充当网关或代理服务器并且无法在规定的时间段内从代理服务器获得响应时,将收到此错误。
主要原因和解决方案:
父服务器负载很重。
由于位置或带宽较慢,服务器之间存在大量延迟
上面就是常见的HTTP错误及一般原因和解决方法,但是在了解到详细的原因之后,才有具体详细的解决方案。当然服务器有状态码返回的话,起码能说明服务器网络和端口都是通的,我不需要花费大量时间去排查网络、防火墙和服务启动的问题了。