当前位置:首页>HTTP>HTTP状态码>HTTP 5XX 服务器错误 状态码

HTTP 5XX 服务器错误 状态码

作者:微学网发布时间:2019-09-07 13:33:38

简介

5XX 的响应结果表明服务器本身发生错误。

在服务器处理请求时出问题了,服务器可以发一个 5xx 系列错误码给客户端,表示服务器在处理请求的时候出问题了,问题是出在服务器身上而不是客户端身上。

另外,服务器如果发送了 5xx 系列的状态码,除非客户端是使用的 HEAD 方法,否则服务器还应该在响应中给出错误的描述、原因以及解决方法等,客户端可以把这些东西给用户看,让用户知道是什么原因导致了请求出错。

不过通常情况下,用户在收到 5xx 系列错误码的同时,是不会收到导致错误的详细技术信息的,这是为了保护服务端程序安全的需要。

服务器一般会返回一个页面描述所出的错误是由什么原因引起的,而不涉及详细技术信息。

例如在 ASP.NET 中,可以在 web.config 中的 customErrors 节配置自定义错误的显示方式,有 On、Off、 RemoteOnly 三种方式,可以根据具体的需要来设置,像 RemoteOnly 就会给本地开发者显示详细的错误信息以及调试信息,而对远程访问者则会只显示服务器运行时出现错误,没有详细的调试信息。

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。

也有可能是 Web应用存在的 bug 或某些临时的故障。

HTTP 协议中,500 Internal Server Error 是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。

这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。

501 Not Implemented

501 未实现表示服务器对于客户端请求的方法没有实现,从而不能满足客户端的请求。这个错误比较少见,我目前还没有见过这个错误,或者在使用一个开发中的 Web 服务器时会出现这个错误,例如使用 PUT 方法发送请求但是服务器不支持 PUT 方法,那么服务器就可以发送 501 Not Implemented 错误码。

502 Bad Gateway

当服务器是作为一个网关或者代理时,在处理客户端请求时从上游服务器收到了一个无效的响应,这时服务器可以返回一个 502 Bad Gateway。

出现这种情况可能的原因有网关或代理过滤了所请求的网址,或者真正的服务器挂掉了,这些时候代理或网关都可以发送 502 Bad Gateway。

那么,502 Bad Gateway 是用来表示代理或网关在处理请求时发生了错误,并不一定是原始服务器出现了问题。

503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护, 现在无法处理请求。

如果事先得知解除以上状况需要的时间, 最好写入RetryAfter 首部字段再返回给客户端。

503 服务不可用,表示服务器当前负载过大或者正在维护,这通常表示这是一个临时的情况,服务器会在一定的时间之后恢复正常。

如果时间已知,例如服务器在维护,那么服务器在发送 503 Service Unavailable 的同时,可以在响应头部添加一个 Retry-After 字段表示维护会持续多久,在指定的时间之后,客户端就可以尝试再次发送请求了。

如果是使用虚拟主机,那么在网站负载过大的时候,一般都会出现 503 Service Unavailable,因为提供商会限制 CPU 使用率。

不过 503 并不一定表示服务器负载过大或者正在维护,也可能是服务器只是想拒绝处理请求而已。

那么,我们也可以在处理 IP 屏蔽之类的情况时直接来一个 503 Service Unavailable :)

状态码和实际情况的不一致
不少返回的状态码响应都是错误的, 但是用户可能察觉不到这点。
比如 Web 应用程序内部发生错误, 状态码依然返回 200 OK, 这种情况也经常遇到。
程序直接对错误码进行处理,返回正常页面。

504 Gateway Timeout

与 502 Bad Gateway 类似,这个状态码一般是代理或网关服务器返回的,出现这个状态码意味着代理服务器在处理请求时超过了超时时间仍个没有从原始服务器接收到响应内容,也有可能是因为在解析原始服务器的域名时超时了。

505 HTTP Version Not Supported

客户端使用 HTTP 版本不被服务器支持,或者服务器拒绝支持客户端所使用的 HTTP 版本,使用向一个只支持 HTTP 1.0 的服务器发送了一个使用 HTTP 1.1 的请求,那么服务器可以响应 505 HTTP Version Not Supported。

在 RFC 指出服务器如果发送了 505 HTTP Version Not Supported 状态码,那么同时也应该在响应中指出为什么客户端所用的 HTTP 版本不被支持以及服务器支持哪些协议的哪些版本。