跨域问题(CORS / Access-Control-Allow-Origin)

2023-10-27

1、前言

  最近在项目中,调用Eureka REST接口时,出现了CORS跨越问题(Cross-origin resource sharing),在此与大家进行分享,避免多走些弯路。

  项目前端(http://localhost:9000)通过Ajax方式调用Eureka REST 接口(http://localhost:8761/eureka/apps)时,却没有任何反应,则通过F12查看日志发现出现“Access-Control-Allow-Origin“类 异常,详细如下:

…… http://localhost:8761/eureka/apps. Origin http://localhost:9000 is not allowed by Access-Control-Allow-Origin……

通过google,发现是由于CORS跨越问题造成的,解决办法无非有两种方式:响应头添加参数和添加过滤器,下面就详细说说CORS跨越问题的起因与详细解决办法。
2、CORS

 CORS,常被大家称之为跨越问题,准确的叫法是跨域资源共享(CORS,Cross-origin resource sharing),是W3C标准,是一种机制,它使用额外的HTTP头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

 http://localhost:9000请求http://localhost:8761/eureka/apps就是违背了上述原则,即:请求服务器不同端口的另一个资源,出于安全原因,浏览器限制发起的跨源HTTP请求,则会出现本文开头提到的现象及异常。

 例如,XMLHttpRequest和Fetch API遵循同源策略, 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非使用CORS头。

  跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。

什么情况下存在跨域问题

本文提到的由 XMLHttpRequest 或 Fetch 发起的跨域 HTTP 请求。
Web 字体 (CSS 中通过 @font-face 使用跨域字体资源),,因此,网站就可以发布 TrueType 字体资源,并只允许已授权网站进行跨站调用。
WebGL 贴图。
使用 drawImage 将 Images/video 画面绘制到 canvas
样式表(使用 CSSOM)。

面对CORS的限制,将如何解决呢

 世间万物完事,有因必有果,有果必有因。当然CORS的限制,官方也是给出了解决办法的。

 CORS标准新增了一组 HTTP 头字段(Access-Control-Allow-Origin),允许服务器声明哪些源通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括Cookies 和 HTTP 认证相关数据)。

  CORS请求失败会产生错误,但是为了安全,在JavaScript代码层面是无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。

如果有兴趣了解该机制剖析的可以参考https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
3、解决办法

  在查阅大量资源,并了解过CORS机制后,解决办法实质必定会围绕Access-Control-Allow-Origin头。

更多请见:http://www.mark-to-win.com/tutorial/50549.html 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨域问题(CORS / Access-Control-Allow-Origin) 的相关文章

  • 解决 kali换源之后签名无效

    报错问题 apt get update 报错 更新扩展知识 kali更新源 终端输入 vi etc apt sources list 中科大 deb http mirrors ustc edu cn kali kali rolling ma
  • 虚拟化与网络存储技术

    虚拟化技术简介 一 常见的虚拟化技术分类 1 CPU虚拟化 CPU的虚拟化技术是一种硬件方案 支持虚拟化技术的CPU带有特别优化过的指令集来控制虚拟过程 通过这些指令集 VMM会很容易提高性能 2 服务器虚拟化 服务器虚拟化能够通过区分资源
  • 西门子S7-1200 PLC选型前这些要了解

    西门子S7 1200PLC是西门子S7系列PLC产品中一员 S7系列产品包含有 S7 200 Smart 200 S7 1200 S7 300 S7 1500 S7 400等系列PLC 其中S7 200 Smart 200 S7 1200系
  • 10款Visual Studio实用插件

    目录 前言 Visual Studio插件搜索 Visual Studio插件市场 ReSharper 付费 GitHub Copilot 付费 CodeMaid 免费 CSharpier 免费 Visual Studio Theme Pa
  • 修改照片尺寸25mm*35mm

    打开方式 画图 gt 调整图片大小 选择像素 gt 修改为295 413即可
  • flink大数据处理流式计算详解

    flink大数据处理 文章目录 flink大数据处理 二 WebUI可视化界面 测试用 三 Flink部署 3 1 JobManager 3 2 TaskManager 3 3 并行度的调整配置 3 4 区分 TaskSolt和parall
  • 第二届网刃杯--部分Re

    1 freestyle ida中分析有个两个fun atoi 将字符转换为整数 得到答案为3327105 MD5加密提交 2 Re function 没有提供密码 但是在右边看到熟悉的89 50 利用winhex保存出来 得到解压密码 解压
  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 解决Chrome浏览器左键双击没反应,无法启动

    打开任务管理器Ctrl aLT DEL 或是在任务栏图标空白处右击 解决Chrome浏览器点击没反应 2 然后 在进程列中 点击表头排序 之后找到chrome exe进程 解决Chrome浏览器点击没反应 3 右击选择后 结束进程 解决Ch
  • 鼠标右键添加git

    1 打开注册表 win R 输入regedit 2 找到HKEY CLASSES ROOT Directory Background目录 3 查看是否有shell这个目录 如果没有就添加 4 在shell目录下添加 项 鼠标右键点击新建 项
  • IDEA去除掉虚线,波浪线,和下划线实线的方法

    推荐一下个人的公众号 终码一生 专注于Java技术学习 开源项目分享和常见问题解决等 喜欢的小伙伴可以关注下 感谢大家的支持 初次安装使用IDEA 总是能看到导入代码后 出现很多的波浪线 下划线和虚线 这是IDEA给我们的一些提示和警告 但
  • DHCP的配置(以华为eNSP为例)

    如有错误 敬请谅解 此文章仅为本人学习笔记 仅供参考 如有冒犯 请联系作者删除 基础知识介绍 络组建步骤 1 拓扑设计 2 IP地址规划 按照拓扑中划分的 络范围 规划 络位不同的IP地址 3 配置 1 配置各个节点的IP地址 2 路由 全
  • 【Android Studio】Design editor is unavailable until next gradle sync.如何解决?

    Design editor is unavailable until next gradle sync 如何解决 打开一个网上开源的下载文件 在查看安卓页面布局 也就是控件布局时 会出现一个bug Design editor is unav
  • VC从系统进程中查找并杀掉指定进程

    写程序的时候 有时候会调用别 别人写的 的程序的EXE 有的时候还会隐藏这个EXE 但是由于你的程序退出时并没有关闭这个EXE 只是隐藏了 所以在系统的进程查看窗口里面还是会看到的 这样当你下次再执行你自己的程序 还要调用这个程序的时候就会
  • FL Studio2024水果编曲软件21.2.0中文版本下载更新

    FL Studio2024是功能强大的音乐制作解决方案 使用旨在为用户提供一个友好完整的音乐创建环境 让您能够轻松创建 管理 编辑 混合具有专业品质的音乐 一切的一切都集中在一个软件中 只要您想 只要您需要 它总能满足您的音乐需求 工具方面
  • 销售人员一定要知道的6种获取电话号码的方法

    对于销售来说 电话销售是必须要知道的销售方法 也是销售生涯中的必经之路 最开始我们并不清楚这么电话是从哪里来的 也不清楚是通过哪些方法渠道获取 那么今天就来分享给各位销售人员获取客户电话号码的方法 1 打印自己的名片 在工作当中少不了接触其
  • B2B公司如何寻找意向客户的联系方式?

    在B2B公司的营销过程中 少不了寻找意向客户的阶段 这也是销售过程中非常重要的一步 很多新人都是拿到客户联系方式 就直接打电话拜访 俗话说不打没有准备的仗 因此在拜访客户之前就应该做好功课 充分了解客户 这也是B2B业务场景下必做的一环 通
  • CSDN找到“仅我可见”内容

    有时候自己做一些笔记参考了他人的内容 所以想将文章转为 仅自己可见 仅作自用 记录一下CSDN找私密文章的方式 今天摸了好一会儿才找到哈哈哈 1 点击导航栏处的创作中心进入 2 查看更多 3 点击浏览就可以查看啦 来源 CSDN找到 仅我可
  • easyrecovery软件2025免费版电脑数据恢复软件

    easyrecovery14是easyrecovery系列软件的新版本 也是目前行业领先的数据恢复软件 具备更快捷 更高效 更便捷三大特色 能够帮助用户轻松恢复电脑丢失的数据 目前软件支持恢复不同存储介质数据 包括硬盘 光盘 U盘 移动硬盘
  • 在win10和Linux上配置SSH 无密码登录

    文章目录 一 用途 二 在本地机器上使用ssh keygen产生公钥私钥对 1 在Linux 或macOS 上产生SSH公私钥的方法 2 在win10上产生SSH公私钥的方法 a 检查windows 本地是否安装有ssh b 在本地生成SS

随机推荐

  • pytorch和GPU有关操作(CUDA)

    使用GPU前 我们首先需要查看GPU信息 这可以通过如下命令实现 watch nvidia smi 输出如下 可以看到总共有两块3090显卡 一 设定计算设备 默认情况下Pytorch将数据创建在内存 然后利用CPU进行计算 所以我们我们需
  • PL/SQL中执行按钮变为灰色后如何恢复【已解决】

    PL SQL中执行按钮变为灰色后如何恢复 已解决 最近向数据库中导数据 结果PL SQL卡住半天没有反应 我就杀死了PL SQL的进程 再一次打开数据时 发现执行按钮被置灰了 没有办法执行sql 解决方法 随便写一行sql语句 按下键盘F8
  • Vue3 模糊搜索

    1
  • 爬虫基础入门(4)简单模拟登录

    本节我们介绍使用爬虫进行美食杰网站的模拟登录 首先我们找到美食杰的登录界面的url以及headers cookie from urllib import request 首先我们导入request库和cookie库 from http co
  • Bubble冒泡排序

    原谅我偷懒 是真的没有什么写的内容了啊 我都好怀疑他们那些大佬是怎么那么多的文章和技术分享的 我要自闭了 时间复杂度O n2 C 的内置排序函数使用的并非冒泡而是快排 Git地址 public override void SortOrder
  • chatGPT写小游戏1分钟一个,快到起飞

    猜数字游戏的规则是电脑随机生成一个1到100之间的整数 玩家需要猜测这个数字是多少 电脑会提示玩家猜的数字是偏大还是偏小 直到猜中为止 下面是代码示例 import random num random randint 1 100 guess
  • argparse模块的用法

    argparse模块的用法 示例 创建解析器 添加参数 解析参数 ArgumentParser对象 编程 用法 说明 parents formatter class 版本3 5中的新功能 版本 3 2中的新功能 源代码 Lib argpar
  • 用神经辐射场在大场景中漫游

    目录 前言 介绍 背景 改进 NeRF 以编码大型场景 在训练数据中获得足够的观点 动态对象移除 应用 结论 参考 前言 最近一直在做NeRF相关工作 偶然看到台湾智慧实验室一篇文章 Hovering Around a Large Scen
  • 毕业设计 基于单片机的多功能遥控器设计

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • unity 获取复杂物体(模型)中心点

    Unity 获取复杂物体 模型 中心点 1 获取物体中心点 public Vector3 GetCenter GameObject target Renderer mrs target gameObject GetComponentsInC
  • 阿里云云效:代码提交使用

    最近采用阿里云的云效作为管理工具之一 确实蛮不错自动化部署自动化合并代码 但是还是有一定的不同之处 比如我今天提交代码 编码五分钟提交大半天 找了别人也不清楚什么问题 其实是搞错了人家的代码发布流程 首先提交代码第一步 云效创建分支 云效最
  • CSS实现旋转风车

    CSS实现旋转风车 使用css实现旋转风车主要是运用border和css动画来实现的 效果图如下 一 制作风车 首先观察风车是由8个相等形状大小的三角形旋转组成的 可以发现都是围绕一个中心点旋转组成的 所以我们可以先用border画出一个中
  • 系统管理员设置了系统策略禁止进行此安装怎么解决

    最近一位用户在电脑下载安装软件时 系统出现提示 系统管理员设置了系统策略 禁止进行此安装 这该怎么办呢 既然系统管理员禁止了程序安装 那么我们只要开启相应的安装权限就可以了 下面 小编给大家讲解系统管理员设置了系统策略禁止进行此安装的处理方
  • MYSQL中的CREATE TEMPORARY TABLE

    Posted on 八月 19 2008 by arrowpig1979 记录一下今天的一个BUG FIXING 早上收到一个BUG 说有一个到模块A的调用B 多执行几次以后就会出错 错误信息显示SQL ERROR 因为CDC SBE就我最
  • Parker - 最高效的自动标注工具

    http www getmarkman com http www cutterman cn zh parker
  • vue3时间插件——Moment.js使用

    在日期时间这一块在js中是有体现的 但是用起来不是特别方便 尤其是在vue框架中 我们也不可能去那样使用 显得很笨拙麻烦 所以给大家这次带来一个好用的时间插件 就是Moment时间插件 很小巧 使用也方便 也兼容vue3 下面来详细介绍一下
  • 网络层:IP协议

    本博文分享的是网络层的IP协议 从IP协议的基本概念 协议格式开始分析并分享出来 IP协议的基本概念 不同于讨论TCP UDP时只讨论通信主机之间的关系 在讨论IP协议中 会加上主机之间的网络来一起进行讨论分析 主机 一般配有IP地址 路由
  • 【vision transformer】LETR论文解读及代码实战(一)

    LETR Line Segment Detection Using Transformers without Edges 基于vision transformer DETR 提取wireframe的网络框架 截止日前实现了sota性能 论文
  • C3P0连接池的断开自动重联功能

    问题背景 Java后台日志发现Error updating database Cause com mysql jdbc exceptions jdbc4 CommunicationsException Communications link
  • 跨域问题(CORS / Access-Control-Allow-Origin)

    1 前言 最近在项目中 调用Eureka REST接口时 出现了CORS跨越问题 Cross origin resource sharing 在此与大家进行分享 避免多走些弯路 项目前端 http localhost 9000 通过Ajax