在进行web开发过程中,我们经常会遇到各种HTTP状态码。HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码,用于表示服务器对请求的响应状态,向客户端传达请求的处理结果,同时帮助我们定位和解决问题。
文章目录
HTTP状态码由三位数字组成,按照其第一个数字分为五大类,这五大类代表着各自不同的功能大类。
- 1xx(信息性状态码):表示请求已被接收,继续处理。
- 2xx(成功状态码):表示请求已成功被服务器接收、理解和处理。
- 3xx(重定向状态码):表示需要进一步操作以完成请求。
- 4xx(客户端错误状态码):表示客户端发送的请求有错误。
- 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
400 Bad Request
HTTP 400
,即 400 Bad Request
,是HTTP协议中用于表示客户端请求错误的一种状态码。当服务器无法理解或处理客户端发送的请求时,会返回此状态码。
HTTP 400
状态码表示“错误的请求”(Bad Request
)。这意味着服务器无法处理客户端发送的请求,因为请求中存在某些问题,如语法错误、参数错误、请求实体错误、安全问题或服务器策略拒绝等。
产生的场景很多,网上的解释也很多,大家在测试的时候比较可能出现的原因如下:
-
参数错误:该情况是最容易出现。
- 在前后端交互中,常见的问题是前端提交的字段名称或类型与后端的实体类不一致,导致后端无法正确解析请求。
- 参数类型错误,比如参数有一个
type
,类型是boolean
类型,但是传参是int
类型。 - 缺少必填参数,如果缺少必填参数也会出现这种情况。
-
请求实体错误:
- 客户端发送的请求实体(如请求体中的数据)无法被服务器处理。
- 例如,请求体格式错误(如JSON格式错误)、请求体大小超过服务器限制等。
当遇到 HTTP 400
错误时,可以采取以下步骤进行排查和解决:
- 确保URL是正确的,没有拼写错误或格式错误。如果URL是从其他地方复制粘贴的,请检查是否有丢失的部分或转义字符。
- 检查请求中的参数是否正确,包括参数名称、值和类型。如果是通过表单提交数据,请确保每个字段都填写正确。对于API调用,请确保参数名称、值和类型都符合API文档中的规定。
- 通过开发者工具检查浏览器发出的请求头,确保它们符合目标服务器的预期。例如,检查ContentType是否正确,确保与请求体的格式相匹配。
HTTP 400
状态码表示客户端的请求存在错误,需要仔细检查和修正请求中的语法、参数、请求体、请求头等信息,以确保它们符合服务器的要求。
404 Not Found
HTTP 404
是Web服务器在接收到客户端请求时,如果无法找到用户请求的资源,就会返回的一个错误代码。404 状态码表示未找到(Not Found
),即客户端请求的资源在服务器上不存在或无法找到。
产生的场景如下:
- 客户端提供的URL路径可能包含了拼写错误、大小写错误、额外的字符或缺失必要的部分。
- 请求的资源可能已经被服务器删除,或者移动到了新的位置,但URL没有被相应地更新。
当遇到 HTTP 404
错误时,确保输入的URL正确无误,包括大小写、拼写和路径的完整性。
415 Unsupported Media Type
415 代表服务器无法处理请求附带的媒体格式,这个问题产生是跟发送HTTP报文的请求头中的Content-Type有关。在发送Http请求时带上了相应的头字段,就会通过执行测试。
平时,我们通常使用的HttpRequester中虽热没有设置头字段却可以正常返回,是因为HttpRequester在发送请求的时候帮我们自己去做了一些处理,如果发送的是json数据自动帮我们加上了Content-Type字段的声明,从而能够正常返回结果。
而在Java代码发送请求就需要自己添加这一步,就会产生这个问题。
415 是我们尝试发送具有数据格式的数据,例如 json 等等,需要向接收方传递相应数据类型,接收方如果收不到类型,就会解析失败,产生这个问题。
500 Internal Server Error
HTTP 500
表示服务器内部错误(Internal Server Error
),是客户端向服务器发送请求时,服务器在处理过程中遇到无法处理的问题而返回的一种状态码。
当服务器在处理客户端的请求时,由于某种内部原因无法完成请求,就会返回 500
状态码。这通常意味着服务器遇到了意外的状况,导致它无法继续执行请求。
产生的场景很多:
- 代码错误:服务器端的应用程序或脚本可能存在语法错误、逻辑错误或数据处理错误。
- 逻辑错误:程序逻辑可能存在问题,导致无法正确处理请求。
- 配置错误:服务器的配置文件可能配置不正确,如网关、代理服务器或负载均衡器的配置错误。
- 数据库连接失败:服务器可能无法连接到数据库或数据库服务不可用。
- 查询失败:数据库查询可能由于SQL语句错误、数据损坏或查询超时等原因失败。
- 服务器资源(如内存、CPU、磁盘空间、带宽等)可能不足,导致无法处理请求。当资源耗尽时,服务器可能无法继续执行请求,从而返回500状态码。
- 服务器与客户端之间的网络连接可能存在问题,如网络延迟、丢包或连接中断。
- 当服务器负载过高时,处理请求的速度可能变慢,甚至导致错误。高流量期间或网站受欢迎程度突然激增时,服务器可能不堪重负。
- 如果服务器依赖于其他外部服务或API,并且这些服务出现故障或不可用,可能会导致服务器无法完成请求。
常见解决方式
- 服务器通常会有详细的错误日志,记录导致500错误的详细原因。
- 检查服务器端的代码和配置文件是否有错误。修正语法错误、逻辑错误和配置错误。
- 如果资源不足是导致500错误的原因,应考虑增加服务器的内存、CPU、磁盘空间或带宽等资源。
1xx(信息性状态码)
- 100 Continue 继续:服务器已经接收到请求的一部分,客户端可以继续发送剩余的请求。这个状态码是临时的,用来通知客户端其部分请求已被服务器接收,并且尚未被拒绝。
- 101 Switching Protocols 切换协议:服务器根据客户端的请求切换协议,如从HTTP切换到WebSocket。
2xx(成功状态码)
- 200 OK 成功:请求已成功处理,并返回所请求的资源。
- 201 Created 已创建:请求已成功处理,并在服务器上创建了新的资源。
- 202 Accepted 已接受:请求已接受,但尚未完成处理。
- 203 Non-Authoritative Information 非授权信息 :服务器已成功处理了请求,但返回的信息可能来自另一来源。
- 204 No Content 无内容:服务器成功处理了请求,但没有返回任何内容。
- 205 Reset Content 重置内容: 服务器成功处理了请求,但没有返回任何内容。与 204响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。
- 206 Partial Content 部分内容:服务器成功处理了部分GET请求(如Range请求),并返回了所请求范围内的资源。
3xx(重定向状态码)
- 300 Multiple Choices 多种选择:当服务器能够响应请求,但有多种表示(例如,具有不同的内容协商类型)时,服务器会返回300 Multiple Choices状态码。这个状态码会伴随一个消息体,其中包含了一个资源特性的列表(例如,不同的内容协商类型),以及一个指向用户代理(客户端)可选择的资源的URI列表。
- 301 Moved Permanently 永久移动:请求的资源已经被永久移动到新的URL。这是永久重定向,搜索引擎会更新其索引中的旧URL为新URL。
- 302 Found 临时移动:请求的资源暂时从不同的URI响应请求。这个状态码通常用于页面的临时重定向。
- 303 See Other 查看其他位置:和 302 类似,请求的资源暂时被移动到新的URL。这是临时重定向,搜索引擎会保留旧URL,但用户访问时会被重定向到新URL。
- 304 Not Modified 未修改:客户端发送了一个条件请求,服务器判断资源未发生变化,因此返回此状态码,客户端可以继续使用缓存中的资源。
- 305 Use Proxy 使用代理- 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
- 307 Temporary Redirect 临时重定向:与302类似,但要求客户端在重定向时使用与原始请求相同的方法(如POST)。
- 308 Permanent Redirect 永久重定向:请求的资源已被永久地移动到由Location头部指定的新URI上,且客户端应使用相同的请求方法对该URI进行请求。
4xx(客户端错误状态码)
- 400 Bad Request 错误请求:请求报文中存在语法错误,导致服务器无法理解请求。
- 401 Unauthorized 未授权:请求需要身份验证,但客户端未提供有效的认证信息。
- 403 Forbidden 禁止:服务器理解请求但拒绝执行,通常是由于权限不足,身份信息过期等。
- 404 Not Found 未找到:服务器找不到请求的资源。
- 405 Method Not Allowed 方法禁用:表示客户端尝试使用的方法(如GET、POST、PUT、DELETE等)对服务器上的资源不被允许。换句话说,请求的资源支持服务器上的操作,但不允许使用特定的HTTP方法来访问。例如,如果服务器上的某个资源仅支持POST请求来创建新数据,但客户端尝试使用GET方法来请求该资源,则服务器将返回405状态码。
- 406 Not Acceptable 不接受:服务器无法根据客户端请求的内容特性完成请求。这通常是因为客户端在请求中指定了某些特定的内容类型或字符集等,但服务器无法以这些指定的方式返回内容。
- 407 Proxy Authentication Required 需要代理授权:表示客户端在尝试通过代理服务器访问资源时,未提供必要的代理身份验证信息。这个状态码与401(Unauthorized)类似,但特别指出了需要代理服务器的身份验证。
- 408 Request Timeout 请求超时:服务器等待客户端请求时间过长,超时关闭连接。
- 409 Conflict 冲突:服务器在完成请求时发生冲突。这通常发生在尝试修改资源时,客户端提交的新版本与服务器上的当前版本存在冲突(如版本控制问题)。例如:两个用户同时尝试编辑同一文档的不同部分。
- 410 Gone 已删除:请求的资源已永久删除,且不会再次可用。这通常表示资源已从服务器上永久移除,且没有进一步的转发地址。例如:页面或资源被永久删除,不再存在于服务器上。
- 411 Length Required 需要有效长度:服务器拒绝在没有定义
Content-Length
头的情况下接受请求。这通常发生在POST或PUT请求中,当请求体非空时,客户端必须提供Content-Length
头以指示请求体的长度。例如:客户端发送请求时未包含Content-Length
头,且请求体不为空。 - 412 Precondition Failed 未满足前提条件:服务器未满足请求中的一个或多个前提条件。这通常发生在请求中包含了如
If-Match
、If-None-Match
、If-Unmodified-Since
、If-Modified-Since
等条件头,且这些条件未得到满足时。例如:客户端尝试更新一个资源,但提供的条件(如版本号)与服务器上的资源不匹配。 - 413 Payload Too Large 请求实体过大:请求实体过大,超出了服务器能够或愿意处理的大小。这通常发生在客户端尝试上传的文件过大时。例如:用户尝试上传一个超出服务器限制大小的文件。
- 414 URI Too Long 请求的 URI 过长:请求的URI(统一资源标识符)过长,服务器无法处理。这通常是由于URL中包含过多的参数或路径信息导致的。客户端生成的URL过长,超过了服务器能够处理的长度限制。
- 415 Unsupported Media Type 不支持的媒体类型:请求的格式不受请求页面的支持。这通常发生在客户端发送的请求体内容与服务器期望的媒体类型不匹配时。例如:客户端尝试以服务器不支持的格式(如JSON而非XML)发送数据。
- 416 Range Not Satisfiable 请求范围不符合要求:请求的范围无效,无法满足请求。这通常发生在客户端请求了资源的一个无效范围时(如请求一个不存在的文件部分)。例如:视频或文件下载时,客户端请求了一个超出文件实际大小的范围。
- 417 Expectation Failed 未满足期望值:服务器无法满足"Expect"请求标头字段的要求。这通常与客户端和服务器之间的特定协议或期望有关。例如:客户端在请求中包含了Expect头,但服务器无法或不愿意满足该期望。
- 429 Too Many Requests 请求过多:当客户端在短时间内向服务器发送了过多的请求,超出了服务器设定的请求速率限制时,服务器会返回429状态码。这是一种速率限制措施,用于保护服务器资源不被过度消耗。
5xx(服务器错误状态码)
- 500 Internal Server Error 服务器内部错误:服务器内部错误,无法完成请求。这是一个通用的错误响应,当服务器遇到意外情况,阻止它完成对请求的处理时返回。
- 501 Not Implemented 尚未实施:服务器不支持当前请求所需要的某个功能。例如,客户端执行了一个服务器不支持的HTTP方法。
- 502 Bad Gateway 错误网关:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。这通常意味着上游服务器已关闭(不响应网关/代理),或者没有按预期和网关/代理进行配合。
- 503 Service Unavailable 服务不可用:由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个Retry-After用以标明这个延迟时间。
- 504 Gateway Timeout 网关超时:作为网关或者代理的服务器没有及时从上游服务器收到请求。这通常意味着上游服务器已关闭(不响应网关/代理),或者没有按预期和网关/代理进行配合。
- 505 HTTP Version Not Supported HTTP 版本不受支持:服务器不支持请求中所用的HTTP协议版本。
- 506 Variant Also Negotiates 变体也在协商中:透明内容协商代理(如使用HTTP/1.1中描述的206 Partial Content的代理)遇到一个其无法或不愿进行协商的变体。
- 507 Insufficient Storage 存储空间不足:服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 2518)
- 508 Loop Detected 检测到循环:服务器在处理请求时检测到无限循环。
- 510 Not Extended 未扩展:进一步扩展状态码需要获得服务器的扩展支持。
- 511 Network Authentication Required 需要网络身份验证:客户端需要进行身份验证才能获得网络访问权限。