专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

302错误是什么意思,302错误怎么解决

来源:小易整编  作者:小易  发布时间:2023-03-21 05:39
摘要:302错误是什么意思,302错误怎么解决问题描述fetch发送一个请求,请求登录过期返回302,浏览器自动重定向到ResponseHeaders的Location登录页面。Location对应的服务器不接受跨域请求,因此页面报错。尝试在fe...

302错误是什么意思,302错误怎么解决

问题描述


fetch 发送一个请求,请求登录过期返回 302,浏览器自动重定向到 Response Headers 的 Location 登录页面。Location 对应的服务器不接受跨域请求,因此页面报错。

尝试在 fetch 的回调函数处理,一旦 fetch 的 response status 是 302 就跳转到 Location 页面, 但是不论在fetch的回调函数中做任何事情,都执行不到。

302错误是什么意思,302错误怎么解决

什么是 HTTP 状态码 302 ?


HTTP 302 重定向状态码表明请求的资源被暂时的移动到了由Location头部指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新。

使用场景:

  1. 在 OAuth 流程中,302 经常使用;

  2. 有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下可以使用临时重定向。

  3. 搜索引擎不会记录该新的、临时的链接。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。

痛点:浏览器 自动 发起对 重定向地址的请求,js 无法插手干预。

fetch 为什么不能拦截302?


一般请求的流程:
  • fetch 发送请求;

  • 服务器返回 response 并且带有状态码(比如200) ;

  • 浏览器接收到响应,结果递交给fetch;

  • 从 fetch 的回调函数获取相应数据;

302错误是什么意思,302错误怎么解决

302 临时重定向请求的流程是:
  • fetch 发送请求;

  • 服务器返回 response (带有location) 并且带有 302 状态码;

  • 浏览器接收到响应,自动从302响应的头信息的重定向地址中取到 location 进行跳转;

对于重定向,当浏览器检查到 headers 中存在 Location,会直接进行跳转,不会告知任何请求发送者(fetch),这时候发送者会以为请求还在处理中。所以此时的 fetch 的 then 和catch 都捕获不到信息

如何解决?


1. 配置 fetch 的 redirect

fetch 的 options 配置项redirect,用于配置可用的 redirect 模式。
redirect 的值有:
  • follow:默认, 自动重定向;

  • error:如果产生重定向将自动终止并且抛出一个错误;

  • manual:手动处理重定向;

error

如果产生重定向将自动终止并且抛出一个错误。此错误可以在 fetch catch 回调函数中捕获:TypeError: Failed to fetch。
fetch 只有服务器错误才调用 catch,其他都会调用 then 函数,那么 302 为什么会调用catch?
不是 302 导致 catch 被调用而是重定向后的请求的 response 导致 catch 被调用。

302错误是什么意思,302错误怎么解决

manual

手动处理重定向。通过这种方法只能知道发生了重定向,但是 response 的内容非常有限,无法获取到具体的信息。

302错误是什么意思,302错误怎么解决

2. 后端改写状态码,前端手动处理

目前的 302 是对 404 的改写,那么如果我们将 404 改写成自定义状态码,然后前端捕获到这个状态码后,进行手动处理。这种方法则需要前后端的同学都做处理。

301 和 302 状态码区别


301:永久重定向。一旦请求发往某个URL,状态码返回301,那么浏览器就会自动跳转到 header中 Location 对应的 url。下次请求,再次向 location 对应的 url 发送请求。
  • 之后每次请求都会跳转到 location 对应的url。没有例外。

  • 浏览器可以缓存从这个 url 获取的响应。

302:临时重定向。请求的资源临时从不同的url获取。一旦请求发往某个URL,状态码返回302,那么浏览器就会自动跳转到 header中 Location对应的 url。但是下次再次请求的时候向原来的url发请求。
  • 每次请求不能确定是否向 Location 的 url 发请求,因此需要先想原来的 url 发送请求确定。

  • 浏览器不可缓存从重定向的 url 获取到的响应。

重定向可以用来set cookie


浏览器如果发现当前请求的响应要重定向,则会直接忽略掉 response 的 body,无法在开发者工具中的 network 面板上看到 body。虽然重定向请求的 body 会被浏览器忽略掉,但重定向请求响应的头部仍然可以发挥作用。
例如一个请求服务端返回 302 的同时 set-cookie,那么浏览器可以在发起跳转之前在当前页面的域下set cookie。即使因为 302 跳转到其他域了,也仍然可以set cookie。
  1. 用户访问 a 域名

  2. 后端返回302,location是 b 域名,同时set-cookie: cookieA

  3. 浏览器在 a 域名下种上cookie: cookieA,然后向 b 域名发起请求

  4. 后端返回 302,location 是a 域名,同时 set-cookie: cookieB

  5. 浏览器在 b 域名下种上cookie: cookieB,然后向 a 域名发起请求

这里相当于是实现了这样一种效果:一次请求即可向不同域名种下cookie(重定向是后端控制的,前端透明,相当于只有一次请求的效果)。
如果不用重定向的话,可能会考虑配置CORS发一个跨域请求set cookie,但CORS一旦涉及到cookie这种 credentials 信息,就会出现各种各样的限制,实际很难发挥效果。
其实跨域 set cookie 还可以用浏览器的 beacon API 实现,当然也是有一些限制的
重定向可以有多次,比如连续的302, 就是 location 对应的 URL 又返回了 302 和新的location,如此重复直到不再跳转位置。为了防止出现无限重定向的情况,重定向的次数是有上限的。Chrome 浏览器的重定向次数是20,超过20次重定向就会报ERR_TOO_MANY_REDIRECT错误。

本文地址:百科问答频道 https://www.neebe.cn/wenda/935166.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 销售额是什么意思?

    销售额是什么意思?

    销售额是指商业企业的一项关键指标,代表企业在一定时期内的营业额,它实时反映企业经营活动的情况,是衡量企业经营能力和效益的重要指标。销售额可以有多种形式,如零售销售额、批发销售额和出口销售额等。销售额的计算方法很简单,即:销售额=销售数量...

  • iTools是什么意思?

    iTools是什么意思?

    iTools是一款功能强大的苹果设备管理工具。它为苹果设备用户提供了便捷的设备管理功能,包括文件传输、备份还原、应用程序管理、屏幕截图、屏幕录制、音乐管理、视频管理等多种功能,而且支持所有的i系列设备,例如iPod、iPhone和iPad...

  • 无损分区工具是什么意思?

    无损分区工具是什么意思?

    无损分区工具是一种硬盘分区方式,是指在分区时保持原有数据不受损坏的一种分区技术,这种分区技术称为“无损分区”。无损分区可以保护硬盘上的数据,在分区时不会破坏硬盘上的任何数据。而且,在数据安全性上也有一定的优势,因为它不会破坏的数据,因此可...

  • 消费凭证是什么意思?

    消费凭证是什么意思?

    消费凭证是指一种书面的证明凭证,当消费者购买商品或服务时,商家会向其提供消费凭证,凭此凭证可以证明消费者购买了特定的商品或服务,以及在这次购买中耗费的钱财数额。消费凭证是一种用于表示购买交易的依据,是为消费者提供全面鉴证的凭证。它可以表明...

  • DSM系统是什么意思?

    DSM系统是什么意思?

    DSM是一种新晋的分布式、可扩展的模块化系统。它是以无服务器、全节点一致性的系统架构为基础,采用多进程系统将服务、运维功能以模块化的方式集合到一起而不会配置服务的的系统设计模型。DSM的核心特点在于采用了一致性的分布式架构,模块化的结构,...

  • 裸金属是什么意思?

    裸金属是什么意思?

    简而言之,裸金属是指被提取出来,没有被添加任何基材的未加工金属。它是将矿石熔化下去后提炼出来的金属,用来做各种活动和企业的原材料。裸金属通常是一种切削或加工的未经热处理的金属。裸金属一般不经过任何表面处理,以自身属性状态出售。它不会涂以油...

  • CVSS是什么意思?

    CVSS是什么意思?

    CVSS(CommonVulnerabilityScoringSystem,中文译名“公共漏洞评分系统”)是一种漏洞分级和评分系统,是由美国国家信息安全标准研究所(NIST)推行的一套机制,它利用特定的参数来构建一个漏洞评级分类体系...

  • 键盘接口是什么意思?

    键盘接口是什么意思?

    键盘接口一般是用于挂接键盘的接口。它也称为键盘插座或键盘接头,它是一个连接键盘和计算机系统之间的重要硬件部件。键盘接口可以用来接收键盘上发出信号,以便在主板上发出完整的指令。键盘接口可以分为有线和无线两种,有线键盘接口是指采用插孔的连接方...

  • 周排行
  • 月排行
  • 年排行

精彩推荐