HTTP状态码详解

HTTP状态码(HTTP Status Code)是服务器返回给客户端的3位数字代码,用于表示网页服务器超文本传输协议(HTTP)的响应状态。这些状态码由RFC 2616规范定义,并得到多个后续规范的扩展。它们帮助客户端理解请求的处理结果,从而采取相应的行动。以下是HTTP状态码的分类和详细解释。

1、 1XX:信息响应

1XX类别的状态码表示消息,是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。常见的状态码有:

  • 100 Continue:客户端应该继续发送请求。
  • 101 Switching Protocols:服务器通知客户端修改协议,即客户端需要采用新的协议版本去访问服务器,例如,切换到HTTP的新版本协议
2、 2XX:成功响应

2XX类别的状态码表示请求已成功被服务器接收、理解、并接受。常见的状态码有:

  • 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • **201 Created:**已创建。成功请求并创建了新的资源
  • 202 Acceptd: 已接受**。**已经接受请求,但未处理完成
  • **203 Non-Authoritative Information:**非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
  • 204 No Content:无内容。服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。
  • 206 Partial Content :部分内容。客户端进行了范围请求,服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3、 3XX:重定向

3XX类别的状态码表示客户端需要执行某些特殊的处理以正确处理请求,通常用于重定向。常见的状态码有:

  • 300 Multiple Choices:多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
  • 301 Moved Permanently:永久重定向,请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。
  • 302 Found:临时重定向,请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。注意,虽然302标准禁止POST变成GET,但实际使用时很多浏览器会这样做。
  • 303 See Other:查看其它地址。表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
  • 304 Not Modified:未修改。客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。例如,客户端请求的资源在客户端本地已有缓存,会在请求头部中加入"If-Modified-Since"、"If-None-Match"等字段,服务端根据这些字段信息判断这些资源信息是否经过修改,如果没有则返回304状态码,客户端可以直接使用缓存中的资源。
  • 305 Use Proxy:使用代理。所请求的资源必须通过代理访问
  • 307 Temporary Redirect:临时重定向,和302有相同的含义,区别在于307不会强制浏览器将POST方法改为GET方法。
4、 4XX:客户端错误

4XX类别的状态码表示客户端是发生错误的原因所在。常见的状态码有:

  • 400 Bad Request:请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求。
  • 401 Unauthorized:发送的请求需要有通过HTTP认证的认证信息。第一次收到401状态码表示需要进行用户认证,第二次再收到401状态码说明用户认证失败。
  • 403 Forbidden:请求资源的访问被服务器拒绝,服务器端没有必要给出详细理由,但可以在响应报文实体的主体中进行说明。
  • 404 Not Found:服务器上无法找到请求的资源。此外,也可能是服务器端在拒绝请求且不想说明原因的时候使用。
  • 405 Method Not Allowed:客户端请求的方法虽然能被服务器识别,但是服务器禁止使用该方法。
  • 406 Not Acceptable:请求的资源的内容特性无法满足请求头中的条件,因此无法生成响应实体。
  • 407 Proxy Authentication Required:请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
  • 408 Request Time-out:服务器等待客户端发送的请求时间过长,超时
  • 409 Conflict:服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
  • 410 Gone:客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
  • 411 Length Required:服务器无法处理客户端发送的不带Content-Length的请求信息
  • 412 Precondition Failed:客户端请求信息的先决条件错误
  • 413 Request Entity Too Large:由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
  • 414 Request-URI Too Large:请求的URI过长(URI通常为网址),服务器无法处理
  • 415 Unsupported Media Type:服务器无法处理请求附带的媒体格式
  • 416 Requested range not satisfiable:客户端请求的范围无效
  • 417 Expectation Failed(预期失败):服务器无法满足请求头中 Expect 字段指定的预期行为。
  • 418 I'm a teapot:状态码 418 实际上是一个愚人节玩笑。它在 RFC 2324 中定义,该 RFC 是一个关于超文本咖啡壶控制协议(HTCPCP)的笑话文件。在这个笑话中,418 状态码是作为一个玩笑加入到 HTTP 协议中的
5、 5XX:服务器错误

5XX类别的状态码表示服务器本身发生错误。常见的状态码有:

  • 500 Internal Server Error:服务器端在执行请求时发生了错误,可能是Web应用存在的bug或某些临时的故障。
  • 501 Not Implemented:服务器不支持当前请求所需要的某个功能,可能是服务器无法识别请求的方法。
  • 502 Bad Gateway:作为网关或代理工作的服务器尝试执行请求时,从上游服务器接受到无效的响应。
  • 503 Service Unavailable:由于临时的服务器维护或过载,服务器无法处理请求。
  • 504 Gateway Timeout:作为网关或代理工作的服务器尝试请求时,未能及时从上游服务器或者辅助服务器收到响应。
  • 505 HTTP Version Not Supported:服务器不支持或拒绝支持在请求中使用的HTTP版本。

总结

HTTP状态码是Web开发中不可或缺的一部分,它们帮助客户端和服务器之间进行有效的通信。通过理解和使用这些状态码,开发者可以更好地调试和优化Web应用,提高用户体验。希望这篇博客能帮助你更好地理解HTTP状态码,并在实际开发中加以应用。

相关推荐
速盾cdn1 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211231 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin1 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书3 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
PersistJiao3 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
冰帝海岸3 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象4 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring