HTTP---------状态码

当服务端返回 HTTP 响应时,会带有一个状态码,用于表示特定的请求结果。比如 HTTP/1.1 200 OK,里面的 HTTP/1.1 表示协议版本,200 则是状态码,OK 则是对状态码的描述。

由协议版本、状态码、描述信息组成的行被称为起始行,服务端返回的响应报文中的第一行便是它,然后是响应头和响应体。

首先状态码由三位数字组成,按照第一个数字的不同,可分为五个类别,每个类别的含义如下

  • 1xx(信息响应):这类状态码表示临时响应,意思是告诉客户端,服务端已收到部分请求,请你继续发送剩余的部分;

  • 2xx(成功):这类状态码表示客户端的请求已被成功处理;

  • 3xx(重定向):这类状态码表示为了完成请求,需要进一步的操作,比如跳转到新位置;

  • 4xx(客户端错误):这类状态码表示请求不合法,比如操作一个没有权限的资源或者不存在的资源等等;

  • 5xx(服务端错误):这类状态码表示服务端内部在处理请求时出现错误,比如服务端的代码报错

3xx 系列的状态码属于重定向类别,用于告知客户端资源的获取方式已经改变,需要采取额外动作以完成请求。

比如访问一个已经废弃的链接,服务端就会返回 3xx 状态码,并在响应头的 Location 字段中指定新链接。客户端发现状态码为 3xx 之后,就会自动重定向到 Location 中指定的新链接。

另外在 RFC2068 中,规定客户端重定向次数不应超过 5 次,以防止死循环。

300 Mutiple Choices

当请求的资源有多种表示时,服务端会返回 300,并提供一个资源列表,让客户端自行选择。由于缺乏明确的细节,因此该状态码不常用。

301 Moved Permanently

表示请求的资源已经被永久移动到了一个新的位置,该状态码的使用场景如下。

永久性重定向:当服务端返回 301 Moved Permanently 响应时,它表明请求的资源已经永久地移动到了由 Location 字段指定的 URL,未来所有对该资源的请求都应该使用这个新的URL。

更新书签和链接:301 状态码告诉客户端(如浏览器或搜索引擎)更新其链接或书签。对于搜索引擎优化(SEO)来说,这意味着应将原先页面的权重转移给新的 URL。

搜索引擎优化:在SEO的背景下,使用 301 Moved Permanently 是管理网站结构变化的最佳实践。它有助于维持旧 URL 的搜索排名和信誉,并将其传递给新 URL。

重定向方法:与临时重定向(如 302 Found 或 307 Temporary Redirect)不同,301 是永久性的。这告诉客户端在未来的所有请求中都应使用新的 URL,而不是临时性地查找资源。

302 Found

表示请求的资源临时位于不同的 URL,该状态码的使用场景如下。

临时性重定向:当服务端返回 302 Found 响应时,它表明请求的资源现在暂时位于由 Location 头部指定的不同 URI 中。与 301 Moved Permanently 不同,302 Found 表示这种重定向只是暂时的。

原始 URL 保持有效:服务端期望客户端在未来的请求中继续使用原始的 URL,这意味着临时重定向后,原始 URL 仍然被视为有效。

搜索引擎处理:对于搜索引擎优化(SEO)来说,由于 302 Found 指示的是临时重定向,搜索引擎通常保持对原始 URL 的索引,而不是转移到新的地址。

其它用途:302 Found 也可以用于在网站维护期间或在进行 A/B 测试时,重定向到不同的 URL,同时保持原 URL 的有效性。

307 Temporary Redirect

注:305 和 306 已经被废弃了,这里简单了解一下即可。

  • 305 Use Proxy:该状态码表示请求的资源必须通过代理访问,代理的地址由 Location 字段给出。

  • 306 Switch Proxy:该状态码表示后续请求应使用不同的代理来访问资源。

305 和 306 在现如今的网络请求中不会遇到,因此简单带过,我们直接看 307。

首先 307 和 302 的作用相同,都表示临时性重定向,即要访问的资源临时移动到了另一个 URI 上,但在 HTTP 方法的处理方面,两者有所差异。

307 Temporary Redirect 要求客户端在后续的重定向请求中使用与原始请求相同的 HTTP 方法。例如原始请求是一个 POST 请求,那么在重定向后,客户端也必须使用 POST 方法发送到新的 URI。

而 302 Found 最初设计时也要求客户端保持相同的请求方法,但在实际使用中,许多客户端(如浏览器)会将后续的重定向请求改为 GET 方法,即使原始请求是 POST 或其它方法。虽然这种行为与 HTTP/1.1 规范不符,但已经成为事实上的标准。

所以 302、303、307 都表示临时性重定向:

  • 302 Found 的原始设计意图是重定向时使用的方法不变,但许多客户端(如浏览器)会默认使用 GET,当然也有客户端没有这么做。因此这就增加了模糊性,于是便有了 303 和 307;

  • 303 See Other 明确指出客户端在重定向时应该使用 GET 方法,无论原始请求使用的是哪种方法。因此 303 可以确保在处理完 POST 请求(如表单提交)后引导浏览器加载一个新页面,并且刷新或后退操作不会再次提交表单;

  • 307 Temporary Redirect 则明确指出重定向时,使用的请求方法要保持不变;

403 Forbidden

该状态码表示服务端理解客户端的请求,但因客户端没有访问请求资源的权限,所以服务端拒绝执行该请求,即使请求是有效的。

和 401 不同,返回 401 是因为请求缺少有效的身份凭证,导致服务端不知道客户端的身份。而 403 意味着服务端知道客户端是谁,只是它没有足够的权限来触发请求的执行,因此拒绝访问。

所以回顾一下认证和授权:

  • 未认证是 Unauthenticated;

  • 未授权是 Unauthorized;

我们发现 401 Unauthorized 改成 401 Unauthenticated 会更合理一些,而 403 Forbbiden 对应的才是 Unauthorized,因为没有访问资源的权限不就是未授权吗,即客户端未被授予访问指定资源的权限。

认证和授权的中文很好区分,但英文就容易混淆了,因为长得比较像。

补充:为了安全起见,服务端可能会故意使用 404 Not Found 而非 403 Forbidden 来隐藏资源的存在,避免暴露敏感信息。

404 Not Found

这个应该是最知名的状态码了,它表示服务器找不到请求的资源。当客户端请求的资源在服务器上不存在或者未被发现,就会返回 404。

出现 404,主要是以下几个原因:

  • 用户输入了错误的 URL;

  • 本来存在的资源被删除、移动或重命名,但却没有重定向;

  • 服务器或网站的配置问题,导致无法访问特定资源;

在 Web 开发中,我们通常也会自定义 404,比如你要找的页面去火星了······,等等之类的。

虽然 404 通常被视为错误,但合适的处理和用户友好的错误页面可以在很大程度上改善用户的浏览体验。对于网站管理员和开发者而言,妥善管理和最小化 404 错误是提高网站质量和用户满意度的重要部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/264620.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法与数据结构】684、685、LeetCode冗余连接I II

文章目录 一、684、冗余连接 I二、685、冗余连接 II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、684、冗余连接 I 思路分析:题目给出一个无向有环图,要求去掉一个边以后构成一个树&#xf…

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据,包括地标(Landmark)、特征点(Feature Point)、平面(Plane)等,以及使用者的操作信息,如使用者添加的 ARAnchor …

【非比较排序】计算排序算法

目录 CountSort计数排序 整体思想 图解分析 代码实现 时间复杂度&优缺分析 CountSort计数排序 计数排序是一种非比较排序,不需要像前面的排序一样去比较。 计数排序的特性总结: 1. 计数排序在数据范围集中时,效率很高,但…

golang gin单独部署vue3.0前后端分离应用

概述 因为公司最近的项目前端使用vue 3.0,后端api使用golang gin框架。测试通过后,博文记录,用于备忘。 步骤 npm run build,构建出前端项目的dist目录,dist目录的结构具体如下图 将dist目录复制到后端程序同级目录…

Unity中URP下实现水体(水面高光)

文章目录 前言一、实现高光反射原理1、原理:2、公式: 二、实现1、定义 _SpecularColor 作为高光反射的颜色2、定义 _SpecularIntensity 作为反射系数,控制高光反射的强度3、定义 _Smoothness 作为高光指数,用于模型高光范围4、模拟…

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大 紫外-可见吸收光谱法,也称为紫外-可见分光光度法,简称UV-Vis,利用样品分子在紫外和可见光激发下产生电子能级跃迁形成的吸收光谱,对元素进行…

Day 2.exec函数族和线程的基本概念、相关函数接口

exec函数族 extern char **environ; int execl(const char *path, const char *arg, ... /* (char *) NULL */); int execlp(const char *file, const char *arg, ... /* (char *) NULL */); int execle(const…

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作

内容参考于:易道云信息技术研究院VIP课 上一个内容:游戏底层功能对接类GameProc的实现 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:44c54d30370d3621c1e9ec3d7fa1e2a0…

全球游戏市场回暖,Flat Ads推动海外获客增长

摘要:热门游戏品类分析,解读新兴市场与赛道 近日,中国音数协游戏工委发布了《2023年中国游戏出海研究报告》,据报告数据显示,2023年,全球游戏市场规模11773.79亿元,同比增长6.00%,呈现增长回暖趋势。 图源:伽马数据 1.SLG和RPG游戏热度居高不下,休闲游戏增长势头强劲 目前,S…

Java四大引用详解:强引用、软引用、弱引用、虚引用

在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这就像在商店购买了某样物品后,如果有用就一直保留它,否则就把它扔到…

进行模型测量这种量出来坡面的是平面面积还是真实面积?

斜面面积,不是表面积。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 #DasViewer##实景三维##三维重建##三维模型…

基于springboot+vue的音乐网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Java优先级队列--堆

目录 1. 优先级队列 1.1 概念 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 堆向下调整 2.3.2 堆的创建 2.3.3 建堆的时间复杂度 2.4 堆的插入与删除 2.4.1 堆的插入 2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 3.常用接口介绍 3…

【Excel PDF 系列】POI + iText 库实现 Excel 转换 PDF

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 文章目录 前言转换前后效果引入 pom 配置代码实现 前言 最近遇到生成 Excel 并转 pdf 的需求,磕磕碰碰总…

初学学习408之数据结构--数据结构基本概念

初学学习408之数据结构我们先来了解一下数据结构的基本概念。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 本内容来源于参考书籍《大话数据结构》与《王道数据结构》。除去书籍中的内容,作为初学者的我会尽力详细直白地介绍数据结构的…

元学习(meta-learning)的通俗解释

目录 1、什么是元学习 2、元学习还可以做什么 3、元学习是如何训练的 1、什么是元学习 meta-learning 的一个很经典的英文解释是 learn to learn,即学会学习。元学习是一个很宽泛的概念,可以有很多实现的方式,下面以目标检测的例子来解释…

JSON简介以及如何在Python中使用JSON

什么是JSON? JSON是"JavaScript Object Notation"的简称,是一种数据交换格式 JSON格式 假设我们有一个对象,这个对象有两个属性:“name”跟“age”。 在JSON中是这样表达的: { "name":"男孩…

基于JAVA springboot+mybatis智慧生活分享平台设计和实现

基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 可定制系统 欢迎点赞 收藏 …

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition,特别是其【中文进阶版 Win/Mac】,是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化,并兼容W…