触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中,遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结:

哪些情况会触发HTTP preflight

preflight属于cors规范的一部分,在有跨域的时候,在一定情况下会触发preflight请求。根据MDN的总结,触发预检请求的情况在以下五项条件的任意一项不满足都有可能发生:

  1. 请求方式:只能够使用GET POST HEAD
  2. 请求头:只能包含以下九种请求头 Accept Accept-Language Content-Language Content-Type DPR Downlink Save-Data Viewport-Width Width
  3. Content-Type:Content-Type只能包含以下三种类型 text/plain multipart/form-data application/x-www-form-urlencoded
  4. XMLHttpRequestUpload对象:XMLHttpRequestUpload对象没有注册任何事件监听器
  5. ReadableStream对象:请求中不能使用ReadableStream对象

总结来说,跨域不一定会触发preflight请求,但发生preflight预检请求则一定跨域了。下面来看本次关于跨域报错的几种情况及处理方法:

关于跨域报错

1. 接口调用跨域

在业务实现中,两个系统之间进行跳转一定存在跨域。跨域的报错一般是这样的:

Access to XMLHttpRequest at 'https://t8lzp389o4.execute-api.ap-northeast-1.amazonaws.com/dev/feedback' from origin 'http://ac-badcase-feedback.s3-website-ap-southeast-1.amazonaws.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

或者这样的:

Access to XMLHttpRequest at 'https://t8lzp389o4.execute-api.ap-northeast-1.amazonaws.com/dev/feedback' from origin 'http://ac-badcase-feedback.s3-website-ap-southeast-1.amazonaws.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

如何解决

可以看到,上述两种错误:

  1. 一种是提示被请求的资源缺少'Access-Control-Allow-Origin',该响应头是浏览器判断跨域的第一步。这种错误只需要给被请求的接口添加响应头即可解决:

response.setHeader("Access-Control-Allow-Origin", "*");

说明:* 表示可被所有服务跨域访问,可以替换成指定的服务,一般不建议使用 *

  1. 另一种是preflight校验没有通过。这种情况后端需要注意:对于跨域接口,需要添加OPTIONS请求处理。伪代码如下:
if (request.method === "OPTIONS") {
    response.status = 200
    return
 }

2. Access-Control-Allow-Private-Network

这种情况主要出现在:如从部署在亚马逊的系统跳转到部署在内网的业务系统的过程中。浏览器报错提示如下:

Access to XMLHttpRequest at 'http://private.com' from origin 'http://public.com' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `private`.

报错截图如下:

在这里插入图片描述

解决方法

  1. 开发时:

支持公网访问的私网接口,添加Access-Control-Allow-Private-Network响应头

在这里插入图片描述

  1. 使用时:

不同浏览器对该响应头的限制不同:

  • 对于Firfox:添加上述响应头后,该跨域即可解决,无需其它操作,访问成功
  • 对于Chrome:添加该响应头依然无法解决上述问题,需要的操作:
    • 访问chrome://flags/地址
    • 搜索Block insecure private network requests,将该选项设置成Disabled,如下图:
      在这里插入图片描述

相关资料

1. 私有网络访问限制

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迭代的 CKKS 高精度自举

参考文献: [KDE23] Kim A, Deryabin M, Eom J, et al. General bootstrapping approach for RLWE-based homomorphic encryption[J]. IEEE Transactions on Computers, 2023.[BCC22] Bae Y, Cheon J H, Cho W, et al. Meta-bts: Bootstrap** precision beyond the …

Java基础概念 7-计算机中的数据存储

目录 Java基础概念 7-计算机中的数据存储 计算机的存储规则 进制 十进制:0123456789 二进制:01 常见的进制 不同进制在代码中的表现形式 计算机为什么用二进制存储数据? 进制之间的转换 任意进制转十进制 公式: 系数*基数的权次幂 相加 二进制转十进制** 八进制转…

基于springboot+vue的智能无人仓库管理系统

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

Java电梯模拟升级版

Java电梯模拟升级版 文章目录 Java电梯模拟升级版前言一、UML类图二、代码三、测试 前言 在上一版的基础上进行升级,楼层采用享元模式进行升级,并对楼层对象进一步抽象 一、UML类图 二、代码 电梯调度器抽象类 package cn.xx.evevator;import java.ut…

cuda WSL2 无需单独安装

https://docs.nvidia.com/cuda/wsl-user-guide/index.html 这个写的很详细

正则化解决过拟合

拟合 蓝色的圈代表数据,红色的线和绿色的线分别代表我们学习到的曲线。 绿色曲线相对红色曲线更加平滑。绿色曲线才是我们想要的,红色曲线从某种程度上讲是过拟合的,可以从图上看到他的误差是很小的,每个点的误差都是很小很小的。…

纯css+html实现拟态开关按钮面板

适合智能家居的开关面板UI 参考:https://drams.framer.website/

网络聊天室

Ser.c #include<myhead.h> #define SER_IP "192.168.159.148" #define SER_PORT 6666//因为客户端发送给服务器的消息是不同类型&#xff0c;所以定义结构体比较方便 typedef struct msg_TYPE {char type; // L:登录  C:聊天  Q:退…

flowable的java class task,也叫服务任务

源码地址12级程序猿-新年正当红/flowable-ui和服务任务 启动flowable-ui-app 浏览器输入下面的地址 http://localhost:8080/flowable-ui/#/ 在服务任务这里设置java类的路径 com.dmg.flowabledemo.task.MyServiceTask 当请假任务完成之后&#xff0c;自动触发这个服务任务…

网络信息安全:nginx漏洞收集(升级至最新版本)

网络&信息安全&#xff1a;nginx漏洞收集&#xff08;升级至最新版本&#xff09; 一、风险详情1.1 nginx 越界写入漏洞(CVE-2022-41742)1.2 nginx 缓冲区错误漏洞(CVE-2022-41741)1.3 nginx 拒绝服务漏洞&#xff08;CNVD-2018-22806&#xff09; 二、nginx升级步骤 &…

奥壹oelove婚恋交友v10.0_10.1情感导师插件_商城插件SQL数据库导入升级方法

大家注意哈奥壹oelove的系统默认是不含情感导师插件和商城系统的&#xff0c;这两个插件需要再官方独立购买&#xff0c;有幸公司付钱购买了系统及两套商业插件&#xff0c;可以看我昵称找我注明CSDN我已经把数据库及模板文件提取出来了&#xff0c;先说下数据库把&#xff0c;…

基于Mindspore,通过Resnet50迁移学习实现猫十二分类

使用平台介绍 使用平台&#xff1a;启智AI协作平台 使用数据集&#xff1a;百度猫十二分类 数据集介绍 有cat_12_train和cat_12_test和train_list.txt train_list.txt内有每张图片所对应的标签 Minspore部分操作科普 数据集加载 Mindspore加载图片数据集就直接调整成这种…

uniapp H5 $el.querySelectorAll is not a function

在监听是否在可视区域遇到问题&#xff08;网页端&#xff09; 解决方案 <view class"container"> ...省略 业务代码... </view>参考 &#xff1a; https://blog.csdn.net/qq_18841969/article/details/134620559

狼人杀 (狼人) 个人理解玩法

今天 我们来说说 狼人杀游戏 每个板子都有的一个角色 狼人 因为 动物园板子 平民被换成了 羊驼 所以 狼人也是唯一一个所有板子都有的角色 狼人的技能非常简单 每天晚上 可以袭击一名玩家 如果没有特殊情况 被袭击的玩家天亮时会直接出局 特殊情况包括 比较典型的有 守卫的盾…

Matter 笔记1-环境准备,编译

不要远程登录Ubuntu输入以下命令&#xff0c;原因&#xff1a;ubuntu/linux上的http代理设置 1. 准备 1.1 工具 Ubuntu 22.04 LTSClash 里General的端口设置到ubuntu 的网络设置里 1.2 代码 这里使用芯科整理过的代码 git clone https://github.com/SiliconLabs/matter.…

Redis线程模型解析

引言 Redis是一个高性能的键值对&#xff08;key-value&#xff09;内存数据库&#xff0c;以其卓越的读写速度和灵活的数据类型而广受欢迎。在Redis 6.0之前的版本中&#xff0c;它采用的是一种独特的单线程模型来处理客户端的请求。尽管单线程在概念上似乎限制了其扩展性和并…

实验笔记之——Gaussian Splatting SLAM配置与测试

之前博客对基于3DGS的SLAM进行了调研 学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研_3d gaussian splatting slam-CSDN博客文章浏览阅读3.2k次&#xff0c;点赞40次&#xff0c;收藏58次。论文主页3D Gaussian Splatting是最近NeRF方面的突破性工作&a…

腾讯云服务器运行yum检测超级慢问题

公司使用腾讯云服务器。最近买的几台服务器使用yum命令安装或 更新软件特别慢。如下图&#xff1a; 从图中看出网络速度极慢。 大约要等5-10分钟检测和更新配置完毕&#xff0c;进入到软件下载界面下载软件速度就快了。 琢磨了一下&#xff0c;连接慢并不是连接不上。查看yum…

第 125 场 LeetCode 双周赛题解

A 超过阈值的最少操作数 I 排序然后查找第一个大于等于 k 的元素所在的位置 class Solution { public:int minOperations(vector<int> &nums, int k) {sort(nums.begin(), nums.end());return lower_bound(nums.begin(), nums.end(), k) - nums.begin();} };B 超过阈…

后台组件-语言包

<groupId>org.qlm</groupId><artifactId>qlm-language</artifactId><version>1.0-SNAPSHOT</version> 平台提供多语言支持&#xff0c;以上为语言包&#xff0c;提供后台多语言支持。首批实现&#xff1a; public class LanguageConstan…