首页 > 其他分享 >Redirect is not allowed for a preflight request 跨域问题的一个解决思路

Redirect is not allowed for a preflight request 跨域问题的一个解决思路

时间:2024-04-24 16:00:51浏览次数:25  
标签:Redirect 浏览器 跨域 请求 request 访问 https http 页面

一、前置知识

首先,我们应当明确一下这个报错究竟是什么问题

当我们需要跨域(当两个页面的协议,主机和端口号有任意一个不相同时)请求资源,且为非简单方法(比如方法为HEAD、GET、POST之外)时,会向服务器发送预检请求。
预检请求方法为OPTIONS,用来检测服务器所支持的请求方法。在预检请求时,不会携带自定义的请求头信息,而且不允许重定向。

了解更多关于跨域,可以看阮一峰大佬的博客
https://www.ruanyifeng.com/blog/2016/04/cors.html

如果进行了重定向,那么就会出现Redirect is not allowed for a preflight request报错。

二、问题背景

今天在进行项目部署的时候,出现了这个问题,最神奇的有两点:

  • 在使用不同的浏览器访问时,有些浏览器可以访问,有些则不行
  • 浏览器直接访问对应的接口可以正常访问,而从那个页面进去就不行

三、原因

我们项目是前后端分离项目,包含两个模块,模块一包含三个子部分的前端加一个后端。模块一的三个前端模块一部分使用了http,一部分使用了https,后端模块则是同时可以使用http、https。

问题原因来了

当我们访问了使用https的页面,由于混合内容问题,所以只能调https的后台,此时我的A浏览器记录了这个https后台的地址。然后我进入http页面,这个页面用http协议调的是https的后端。
此时,触发了HSTS,http页面会将发送的http请求,重定向为https请求,因此,出现了该错误

HSTS 是 HTTP 严格传输安全(HTTP Strict Transport Security) 的缩写,是一种网站用来声明他们只能使用安全连接(HTTPS)访问的方法,详情可见下面这个链接
https://zhuanlan.zhihu.com/p/130946490

那么,为什么会表现为某些浏览器可以访问,而某些浏览器不能访问呢?

原因在于,当我们第一次访问某个网站时,并不会触发HSTS,可以理解为一种缓存,因为我使用过浏览器A进入过https的页面,相应的域名进入了HSTS 预加载列表,所以对应的http页面的后台请求会被转为https,出现跨域重定向问题。而使用浏览器B直接进入那个页面时,由于浏览器B的预加载列表没有记录,因此不会出现重定向问题

四、解决办法

指标不治本的办法是,在HSTS缓存中删除对应的域名。
Chrome内核的浏览器可以访问chrome://net-internals/#hsts
在这里插入图片描述
Delete domain security policies中输入对应域名,点击delete,即可正常访问。

但是这种方法是治标不治本的,最终的解决办法还是将你的后台统一为http或者https。

标签:Redirect,浏览器,跨域,请求,request,访问,https,http,页面
From: https://www.cnblogs.com/kuangke/p/18155659

相关文章

  • 跨域之OPTION请求【转载】
    一、简介    出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?......
  • 客户端使用 FeignClient 调用服务端服务时,报错:Request method ‘POST‘ not supporte
    客户端使用FeignClient调用服务端服务时,报错:Requestmethod‘POST‘notsupported修改错误前调用方式:FeignClient 接口服务@FeignClient(contextId="remotePayFormService",value="payment-service-system")publicinterfaceRemotePayFormService{@GetMap......
  • Excel为批注设置图片背景 出现Bad Request - Request Too long
    Excel为批注设置图片背景  打开EXCEL点击文件 点选项 点击信任中心 点击信任中心设置 点击隐私选项 点击隐私设置 取消全部勾选  在填充效果中在选图片出现 点脱机工作  就可以正常先图片了......
  • DRF之Request源码分析
    DRF之Request源码分析【一】路由入口fromdjango.contribimportadminfromdjango.urlsimportpathfrombookimportviewsurlpatterns=[path('admin/',admin.site.urls),path('test/',views.TestView.as_view()),path('test_http/&#......
  • 使用 HttpWebRequest 类发送大量数据时,POST 或 PUT 请求失败
    本文可帮助你解决在使用 HttpWebRequest 类在运行Microsoft.NETFramework的计算机上发送大量数据时可能会引发错误的问题。原始产品版本:.NETFramework原始KB编号: 908573症状当你使用 HttpWebRequest 类通过 POST 或 PUT 请求发送大量数据时,请求可能会在运行.......
  • 使用js语文json字符串通过get方式传值,然后用request接收
    在JavaScript中,如果你有一个JSON字符串,并且你想通过GET请求或者其他HTTP请求来传递这个字符串,你可以使用encodeURIComponent函数来确保字符串能够安全地通过URL传输。//假设我们有一个JSON对象constjsonObject={name:"John",age:30,city:"NewYork"};//将......
  • Spring中将@RequestParam绑定到对象(转)
    译文:https://blog.csdn.net/dnc8371/article/details/106810876/译文作者:dnc8371来源:CSDN原文:https://www.javacodegeeks.com/2018/10/how-bind-requestparam-object-spring.html您是否在请求映射方法中用@RequestParam注释了多个参数,并认为它不可读?当请求中需要一个或两个输......
  • 接口自动化Python+requests踩坑记录
    问题描述同一个接口,传参相同,用postman,jmeter等接口工具都能正常访问,后台也能正常返回数据,但是用requests.post()调用就会返回400jmeter传参以及响应这是一个登录接口,如图所示的传参,是可以正常登录的  postman传参以及响应可以看到,两个工具的传参不一样,但是也是同样可以正......
  • 保障跨域数据交换安全可控,跨域数据管控方案了解一下!
    跨域数据管控是指当数据从一个安全域(通常由单一组织控制)传输到另一个安全域时,对数据的流动和使用进行管理和控制的过程。这通常涉及到确保数据的安全性、合规性以及完整性,同时允许在不同组织或地理位置间进行有效的数据交换。跨域数据管控需要围绕三个风险展开:数据泄露风险、数......
  • RequestInitial
    @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.TYPE})@Documentedpublic@interfaceRequestInitial{Class<?>[]groups()defaultGroup.All.class;}packagecom.heima.commons.groups;publicclassGroup{/**......