当前位置: 首页 > article >正文

《网络协议 - HTTP传输协议及状态码解析》

文章目录

  • 一、HTTP协议结构图
  • 二、HTTP状态码解读
    • 1xx: 信息响应类
    • 2xx: 成功响应类
    • 3xx: 重定向类
    • 4xx: 客户端错误类
    • 5xx: 服务器错误类

一、HTTP协议结构图

在这里插入图片描述

二、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)维护。

‌‌HTTP状态码是服务器在接收到请求后,向客户端返回的三位数字代码,用于表示服务器对请求的处理结果。‌这些状态码不仅告诉我们请求是否成功,还能指出失败的原因。HTTP状态码主要分为五大类,每类的首位数字不同,具体如下:‌

1xx: 信息响应类

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

  • 100 Continue - 服务器已收到请求的一部分,并继续期望接收请求的其余部分。
  • 101 Switching Protocols - 服务器已根据Upgrade请求头中的协议转换请求,并且正在使用新的协议。
  • 102 Processing - 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。

2xx: 成功响应类

这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

  • 200 OK - 请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • 201 Created -请求已经被实现,而且有一个新的资源已经依据此请求的需求而建立,且其URI已经随Location头信息返回。
  • 202 Accepted -服务器已接受请求,但尚未处理。最终行动会在未来某个时间点进行。
  • 203 Non-Authoritative Information - 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。
  • 204 NoContent - 服务器成功处理了请求,没有返回任何内容。
  • 205 Reset Content - 服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。
  • 206 Partial Content - 服务器已经成功处理了部分 GET 请求。
  • 207 Multi-Status - 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。

3xx: 重定向类

这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A->A,或者A->B->C->A),因为这会导致服务器和客户端大量不必要的资源消耗。按照 HTTP/1.0 版规范的建议,浏览器不应自动访问超过5次的重定向。

  • 301 Moved Permanently - 请求的资源已被永久移动,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
  • 302 Found - 请求的资源临时从不同的URI返回。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
  • 303 See Other - 对应当前请求的响应可以在另一个 URL 上被找到,而且客户端应当采用 GET 的方式访问那个资源。
  • 304 Not Modified - 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
  • 305 Use Proxy - 被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应
  • 306 Switch Proxy - 在最新版的规范中,306状态码已经不再被使用。
  • 307 Temporary Redirect - 请求的资源临时从不同的URI 响应请求。

4xx: 客户端错误类

这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。

  • 400 Bad Request - 请求包含语法错误或无法完成请求。
  • 401 Unauthorized - 当前请求需要用户验证。该状态码表示发送的HTTP数据需要通过HTTP认证。
  • 402 Payment Required - 该状态码是为了将来可能的需求而预留的。
  • 403 Forbidden - 服务器理解请求,但是拒绝执行它。
  • 404 Not Found - 服务器无法找到被请求的URI。
  • 405 Method Not Allowed - 请求行中指定的请求方法不能被用于请求相应的资源。
  • 406 Not Acceptable - 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
  • 407 Proxy Authentication Required - 与401响应类似,只不过客户端必须在代理服务器上进行身份验证。
  • 408 Request Timeout - 请求超时。
  • 409 Conflict - 由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。

5xx: 服务器错误类

(5、6字头)
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。
这些状态码适用于任何响应方法。

  • 500 Internal Server Error - 服务器遇到了一个未曾预料到的情况,导致其无法完成对请求的处理
  • 501 Not Implemented - 服务器不支持当前请求所需要的某个功能。
  • 502 Bad Gateway - 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  • 503 Service Unavailable - 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间后恢复。

在具体的状态码中,例如:

‌200 OK‌: 服务器成功处理了请求。
‌403 Forbidden‌: 请求被服务器拒绝,客户端没有访问权限。
‌500 Internal Server Error‌: 服务器遇到了意外错误,无法完成请求。

参考地址:
解析HTTP错误码400 Bad Request及其常见原因与解决方法
HTTP 请求 错误代码含义
http的常见错误代码
HTTP协议错误码大全
常见HTTP错误代码大全


http://www.kler.cn/a/305574.html

相关文章:

  • 【Allure】mac下环境配置
  • 处理PhotoShopCS5和CS6界面字体太小
  • SpringBoot框架在资产管理中的应用
  • 【测试语言篇二】Python进阶篇:lambda函数、异常和错误处理、Json处理、随机数、星号操作符
  • C++接口类, 抽象类和实体类简述
  • MCU的OTA升级(未完-持续更新)
  • 伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?
  • Linux——分离部署,分化压力
  • Next.js 14 如何在服务端页面中使用客户端渲染组件
  • Python数据分析-Pandas快速入门
  • DingoDB:多模态向量数据库的实践与应用
  • 【Bean】BeanPostProcessor的前置方法和后置方法的作用和使用
  • AG3335芯片介绍
  • 李沐pytorch 课程 深度学习D2l python3.12安装方法
  • uni-app怎么使用uni-icons
  • Android Studio Menu制作
  • html 关于select动态加载数据以及动态分组
  • 订单出现超时未关闭场景解决方案
  • C#中的string和stringbuild
  • 图文讲解HarmonyOS应用发布流程
  • 3290. 最高乘法得分
  • Thinkphp5 + Swoole实现邮箱异步通知
  • 重新认识一下JNIEnv
  • 【学习笔记】SSL密码套件的选择
  • 微信小程序-formData使用
  • VSCode C++ Tasks.json基本信息介绍