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

news2024/11/18 13:31:39

文章目录

  • 一、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.coloradmin.cn/o/2136484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『功能项目』战士的位移型技能【46】

我们打开上一篇45战士的伤害型技能的项目, 本章要做的事情是制作技能按钮,点鼠标点击时释放如果20米内存在敌人会移动到敌人身边(对多个敌人逻辑暂未写)并对怪物造成一定伤害 首先对战士职业的动画控制器增加一个新的技能2动画 设…

镜像问题(k8s部署考试系统)

如果使用containerd拉取不到镜像的话,就使用docker 1.修改decker的镜像源 [rootk8s-master ~]# vim /etc/docker/daemon.json { "registry-mirrors": [ "https://do.nark.eu.org", "https://dc.j8.work", …

Vue : 生命周期

目录 1. beforeCreate(vu2) 2. created(vu2) 3. setup(vu3) 4. beforeMount 5. mounted 6. beforeUpdate 7. updated 8. beforeDestroy 9. destroyed Vue.js 的生命周期是指 Vue 实例从创建到销毁的整个过程中的各个阶段。在 Vue 中,有多个关键的生命周期钩…

Ubuntu22.04系统安装opencv步骤简述及问题解决方法

前言 opencv是一个功能强大、开源且跨平台的计算机视觉库,适用于多种编程语言和操作系统,能够帮助开发者构建各种视觉项目。其模块众多,提供了诸多功能,能够进行图像处理、视频处理等等。比如:Highgui模块提供图像用户…

EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法

OK,不废话,直接开干!说实话是有些坑,或者是我不会用吧 模板如下: invokeHeadMap 这个方法其实针对第一行就是表头的完全没问题。针对第二行的,我DEBUG拿到的是这样很明显,他拿到了第一行;既然…

如何通过OceanBase的多级弹性扩缩容能力应对业务洪峰

每周四晚上的10点,都有近百万的年轻用户进入泡泡玛特的抽盒机小程序,共同参与到抢抽盲盒新品的活动中。瞬间的并发流量激增对抽盒机小程序的系统构成了巨大的挑战,同时也对其数据库的扩容能力也提出了更高的要求。 但泡泡玛特的工程师们一点…

安卓BLE蓝牙通讯

蓝牙测试demo 简介   Android手机间通过蓝牙方式进行通信,有两种常见的方式,一种是socket方式(传统蓝牙),另一种是通过GATT(BLE蓝牙)。与传统蓝牙相比,BLE 旨在大幅降低功耗。这样…

Superset二次开发之源码DependencyList.tsx 分析

功能点 路径 superset-frontend\src\dashboard\components\nativeFilters\FiltersConfigModal\FiltersConfigForm\DependencyList.tsx /*** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* dist…

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 测两个旋转矩形之间是否存在交集。 如果存在交集,则还返回交集区域的顶点。 下面是一些交集配置的例子。斜线图案表示交集区域&#…

C++《类和对象》(下)

在之前类和对象(中)我们学习了类当中的6大默认成员函数,我们了解了6大成员函数的结构特征和特点以及在不同情况各个成员函数是如何调用的,那么接下来我们在本篇当中将继续学习之前在学习构造函数中未了解的初始化列表,…

MySql基础-单表操作

1. MYSQL概述 1.1 数据模型 关系型数据库 关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: 使用表存储数据,格式统一,便于维护 使用SQL语言操作,标准统一&…

高性能微服务架构:Spring Boot 集成 gRPC 实现用户与订单服务即时交互

gRPC 是一种由 Google 开发的高性能、开源的远程过程调用(Remote Procedure Call, RPC)框架。它允许在不同的计算机系统或进程之间进行通信,使得分布式系统和微服务架构中的服务之间能够轻松地相互调用方法。gRPC 基于 HTTP/2 协议&#xff0…

django-admin自定义功能按钮样式

位置在原来的django-admin 栏中的上方【会因为屏幕大小而变换位置】 <!-- 这里是不会替换掉旧的 添加按钮 &#xff0c;而是添加多一个按钮【点击Crawl Data】--> <!-- /home/luichun/lc/Pyfile/Pywebback/app/paqu/templates/admin/yourmodel_changelist.html -->…

基于k8s手动部署rabbitmq集群(Manually Deploying RabbitMQ Cluster Based on k8s)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

安全基础设施如何形成统一生态标准?OASA 硬件安全合作计划启动 | 2024 龙蜥大会

近日&#xff0c;2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&#xff09;在北京盛大召开。 与此同时&#xff0c;由龙蜥社区运营委员会副主席、龙腾计划生态负责人金美琴&#xff0c;阿里云智能集团高级技术专家张天佳&#xff0c;海光信息技术生态技术总监李伟&…

系统架构设计师教程 第5章 5.2需求工程 笔记

5.2 需求工程 ★★★★★ 软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 软件需求包括3个不同的层次&#xff1a;业务需求、用户需求和功能需求(也包括非功能需求)。 (1)业务需求 (business requirement) 反映了组织机构或客户对系统、产品高层次的目标…

用SpringBoot进行阿里云大模型接口调用同步方法和异步方法

同步效果就不展示了,这里展示更常用的异步,多轮异步流式效果展示如下: 结果内容组合 1、同步版本环境准备以及代码 需要开通阿里大模型服务,如果没有开通服务,单独的去生成 key 是无效的。 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 生成你需要的 key 1、…

PHP智慧家政同城服务家政系统小程序源码

智慧家政&#xff0c;同城服务新篇章 —— 探索家政系统的无限可能 开篇&#xff1a;走进智慧家政时代 在这个快节奏的生活中&#xff0c;每一分每一秒都显得尤为珍贵。当忙碌成为常态&#xff0c;如何让家成为真正的避风港&#xff1f;答案或许就藏在“智慧家政同城服务家政…

【JavaScript】数据结构之链表

什么是链表&#xff1f; 多个元素存储的列表链表中的元素在内存中不是顺序存储的&#xff0c;而是通过“next”指针联系在一起的&#xff0c;这个“next”可以自定义。JS中的原型链原理就是链表结构&#xff0c;是通过__proto__指针联系在一起的。 链表和数组的区别 数组是…

c++207 运算重载

调入 op #include<iostream> using namespace std;class Complex { public:int a;int b; public:Complex(int a 0, int b 0){this->a a;this->b b;}void printfCom(){cout << a << "" << b << "i" << endl…