跨域问题(服务器和浏览器之间)待补充

news2024/11/26 10:45:25

一、为什么产生:

同源策略(域名,协议,端口),安全问题

二、怎么解决:

1、cros:修改响应头

2、+jp:采用js标签

3、+代理(创建服务器,定义规则,服务器与服务器之间不存在跨域问题)

当服务器提供解决方案时用前两种,不提供时用代理

跨域问题(Cross-Origin Resource Sharing, CORS)是前端开发中常见的问题,它发生在一个域的网页尝试访问另一个域的资源时。出于安全考虑,浏览器实施了同源策略(Same-Origin Policy),限制了来自不同源的文档或脚本间的交互。以下是几种常用的解决跨域问题的方法,每种方法都带有详细的步骤:

1. JSONP(JSON with Padding)

步骤:

  1. 创建一个回调函数:在前端页面定义一个回调函数,用于处理从服务器返回的数据。
  2. 发送请求:通过<script>标签发送请求到服务器,请求中包含回调函数的名称。
  3. 服务器处理:服务器接收到请求后,将数据包装在回调函数中返回。
  4. 浏览器执行:浏览器执行<script>标签中的脚本,触发回调函数,前端获取数据。

**优点:**兼容性好,几乎所有浏览器都支持。 **缺点:**只支持GET请求,安全性较低。

2. CORS(Cross-Origin Resource Sharing)

步骤:

  1. 发送预检请求(可选):浏览器先发送一个OPTIONS请求到服务器,询问是否可以进行实际请求。
  2. 服务器响应:服务器在响应中设置Access-Control-Allow-Origin等头部,允许跨域访问。
  3. 发送实际请求:浏览器根据预检请求的响应决定是否发送实际请求。
  4. 服务器处理并响应:服务器处理请求并返回数据。

**优点:**支持各种HTTP请求方法,安全性高。 **缺点:**需要服务器端配置,可能需要后端开发人员介入。

3. 代理服务器

步骤:

  1. 设置代理服务器:在服务器端设置一个代理服务,用于转发前端的请求到目标服务器。
  2. 前端请求代理:前端发送请求到代理服务器。
  3. 代理服务器转发:代理服务器将请求转发到目标服务器。
  4. 获取响应:代理服务器将目标服务器的响应转发回前端。

**优点:**可以绕过浏览器的同源策略,适用于复杂场景。 **缺点:**增加了系统的复杂性,可能影响性能。

4. 窗口消息传递(Window.postMessage)

步骤:

  1. 创建iframe:在主页面中创建一个指向第三方网站的<iframe>
  2. 设置消息监听:在<iframe>和主页面中分别设置监听器,监听message事件。
  3. 发送消息:通过postMessage方法在<iframe>和主页面之间传递消息。

**优点:**可以实现跨源通信,不受限于同源策略。 **缺点:**需要第三方网站的配合,使用场景有限。

5. 文档域(document.domain)

步骤:

  1. 设置相同域:两个不同子域的页面设置相同的document.domain属性。
  2. 共享数据:通过共享的域进行数据交互。

**优点:**适用于有相同主域但不同子域的情况。 **缺点:**只适用于具有相同主域的两个不同子域之间。

6. Webpack Dev Server 代理

步骤:

  1. 配置Webpack Dev Server:在Webpack开发服务器配置中设置代理规则。
  2. 前端请求:前端通过Webpack Dev Server发起请求。
  3. 代理转发:Webpack Dev Server将请求转发到目标服务器。

**优点:**开发环境中方便使用,无需服务器端配置。 **缺点:**仅限于开发环境,生产环境需要其他方案。

每种方法都有其适用场景和限制,开发者需要根据实际情况选择最合适的解决方案。

面试:

得分点
同源限制、协议、域名、端口、CORS、node中间件、JSONP、postmessage


标准回答
跨域:当前页面中的某个接口请求的地址和当前页面的地址如果协议、域名、端口其中有一项不同,就说该接口跨域了。
跨域限制的原因:浏览器为了保证网页的安全,出的同源协议策略。

跨域报错信息:

跨域解决方案
cors:目前最常用的一种解决办法,通过设置后端允许跨域实现。
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader("Access-Control-Allow-Methods", "GET, PUT, OPTIONS, POST");

node中间件、nginx反向代理:跨域限制的时候浏览器不能跨域访问服务器,node中间件和nginx反向代理,都是让请求发给代理服务器,静态页面面和代理服务器是同源的,然后代理服务器再向后端服务器发请求,服务器和服务器之间不存在同源限制。

JSONP:利用的原理是script标签可以跨域请求资源,将回调函数作为参数拼接在url中。后端收到请求,调用该回调函数,并将数据作为参数返回去,注意设置响应头返回文档类型,应该设置成javascript。

postmessage:H5新增API,通过发送和接收API实现跨域通信。


加分回答
跨域场景:前后端分离式开发、调用第三方接口

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十二届蓝桥杯Python组1月中/高级试题 第五题

** 十二届蓝桥杯Python组1月中/高级试题 第五题 ** 第五题&#xff08;难度系数 5&#xff0c;35 个计分点&#xff09; 提示信息&#xff1a; 平均数&#xff1a;是指在一组数据中所有数据之和再除以这组数据的个数。 如&#xff1a;“1&#xff0c;2&#xff0c;3&#xf…

安防监控/视频汇聚系统EasyCVR+AI智能分析助力解决校园霸凌事件

一、方案背景 校园霸凌这一校园中不应存在的现象&#xff0c;却屡见不鲜&#xff0c;它像一把锋利的刀&#xff0c;深深地刺入那些无辜的心灵&#xff0c;让受害者承受着无尽的痛苦。随着科技的进步与发展&#xff0c;我们应该追求有效、进步的手段来阻止校园霸凌事件的发生&a…

达坦科技@了你,并邀请你参加2024开源之夏!

开源之夏&#xff08;英文简称“OSPP”&#xff09;是中科院软件所“开源软件供应链点亮计划”指导下的系列暑期活动。达坦科技自开源之夏创办首期起每年参与&#xff0c;积极鼓励在校学生积极参与开源软件的开发维护&#xff0c;培养和发掘更多优秀的开发者。今年&#xff0c;…

超越机械抓手:看多指机器人如何灵活运用触觉?

论文标题&#xff1a; Learning Visuotactile Skills with Two Multifingered Hands 论文作者&#xff1a; Toru Lin, Yu Zhang, Qiyang Li, Haozhi Qi, Brent Yi, Sergey Levine, and Jitendra Malik 1. 机器人新挑战&#xff1a;多指手指操作 在自动化和智能化日益普及的…

【Vulhub靶场】Nginx 中间件漏洞复现

【Vulhub靶场】Nginx 中间件漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09;1. 影响版本2. 漏洞原理3. 漏洞复现 二、Nginx越界读取缓存漏洞&#xff08;CVE-2017-7529&#xff09;1. 漏洞详情2. 影响版本3. 漏洞复现 三、Nginx 配置错误导致漏洞&…

预告 | 飞凌嵌入式邀您共聚2024上海充换电展

第三届上海国际充电桩及换电站展览会&#xff08;CPSE&#xff09;&#xff0c;即将于5月22日~24日在上海汽车会展中心举行。届时&#xff0c;飞凌嵌入式将带来多款嵌入式核心板、开发板、充电桩TCU以及储能EMS网关产品&#xff0c;与来自全国的客户朋友及行业伙伴一同交流分享…

基于R语言绘图 | 转录代谢趋势图绘制教程

原文链接&#xff1a;基于R语言绘图 | 转录代谢趋势图绘制教程 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡事在社群同学&#xff0c;可免费获得自2021年11月份至今全部…

【ArcGIS Pro微课1000例】0058:玩转NetCDF多维数据集

一、NetCDF介绍 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。NetCDF广泛应…

羊大师:当代年轻人如何应对压力

羊大师&#xff1a;当代年轻人如何应对压力 当代年轻人面临各种压力&#xff0c;包括工作、学习、人际关系、经济等方面的压力。以下是一些建议&#xff0c;帮助年轻人应对这些压力&#xff1a; 认识并接受压力&#xff1a; 首先要认识到压力是生活中不可避免的一部分。 尝试…

WPF之DataGird应用

1&#xff0c;DataGrid相关属性 GridLinesVisibility&#xff1a;DataGrid网格线是否显示或者显示的方式。HorizontalGridLinesBrush&#xff1a;水平网格线画刷。VerticalGridLinesBrush&#xff1a;垂直网格线画刷。HorizontalScrollBarVisibility&#xff1a;水平滚动条可见…

卷积通用模型的剪枝、蒸馏---蒸馏篇--RKD关系蒸馏(以deeplabv3+为例)

本文使用RKD实现对deeplabv3+模型的蒸馏;与上一篇KD蒸馏的方法有所不同,RKD是对展平层的特征做蒸馏,蒸馏的loss分为二阶的距离损失Distance-wise Loss和三阶的角度损失Angle-wise Loss。 一、RKD简介 RKD算法的核心是以教师模型的多个输出为结构单元,取代传统蒸馏学习中以教…

【经验总结】 常用的模型优化器

优化器是一种用于优化模型权重和偏差的算法&#xff0c;它根据训练数据更新模型参数&#xff0c;以模型的预测结果更加准确。 1. 常见的优化器 SGD&#xff08;Stochastic Gradient Descent&#xff09;&#xff1a;SGD是一种基本的优化算法&#xff0c;它在每次迭代中随机选择…

借势吃货节趣味小游戏的效果是什么

吃货节对食品、餐饮等行业厂家/商家来说非常利好&#xff0c;借势节日气氛能更快达成预期营销效果&#xff0c;除了传统方式外&#xff0c;线上趣味互动游戏营销也是重要形式。 搜索【雨科】平台拥有多款吃货节趣味抽奖h5小游戏形式&#xff0c;不同玩法和内容承载、渠道传播用…

简单的Python HTML 输出

1、问题背景 一名初学者在尝试将 Python 脚本输出到网页上时遇到了一些问题。他当前使用 Python 和 HTML 进行开发&#xff0c;并且遇到了以下问题&#xff1a; 担心自己的代码过于复杂&#xff0c;尤其是 WebOutput() 函数。希望通过 JavaScript 使用 HTML 模板文件更新数据。…

48. UE5 RPG 实现攻击伤害数字显示

在前面的文章中&#xff0c;我们实现了对敌人的攻击的受击效果&#xff0c;并且能够降低目标的血量&#xff0c;实现死亡效果。相对于正常的游戏&#xff0c;我们还需要实现技能或者攻击对敌人造成的伤害数值&#xff0c;并直观的显示出来。 所以&#xff0c;接下来&#xff0c…

【JAVA】JAVA的垃圾回收机制详解

对于Java的垃圾回收机制&#xff0c;它是Java虚拟机&#xff08;JVM&#xff09;提供的一种自动内存管理机制&#xff0c;主要负责回收不再使用的对象以释放内存空间。垃圾回收机制主要包括以下几个方面的内容&#xff1a; 垃圾对象的识别&#xff1a;Java虚拟机通过一些算法&…

MySQL索引优化(超详细)篇章2--索引调优

目录 1.索引失效状况2.性能分析3.表的索引信息--调整索引顺序4.删除冗余索引5.最佳左前缀法则5.1下面是一个实际的例子来说明这个概念&#xff1a; 6.数据长度和索引长度占用空间比较 1.索引失效状况 MySQL索引失效通常指的是查询语句无法有效地利用索引&#xff0c;而导致全表…

matlab打开文件对话框

在使用matlab GUI制作时&#xff0c;为了便于用户交互使用&#xff0c;经常设置文件打开对话框&#xff0c;让用户根据实际需要选择打开的文件。下面以打开一张图片为例&#xff0c;matlab代码如下&#xff1a; [temp_filepath,temp_filename]uigetfile(*.jpg,请选择要打开的图…

设计模式(2)创造型设计模式

创建型模式 创建型模式1.工厂模式1.1 抽象工厂模式&#xff08;Abstract factory&#xff09;1.2 工厂方法模式&#xff08;Factory Method&#xff09;1.3 简单工厂模式&#xff08;Simple Factory&#xff09; 2. 建造者模式&#xff08;Builder&#xff09;3. 原型模式&…

【Spring Boot 源码学习】深入 ApplicationArguments 接口及其默认实现

《Spring Boot 源码学习系列》 深入 ApplicationArguments 接口及其默认实现 一、引言二、主要内容2.1 ApplicationArguments2.2 DefaultApplicationArguments2.2.1 成员变量2.2.2 构造方法2.2.3 成员方法 2.3 SimpleCommandLinePropertySource2.4 应用场景2.4.1 准备和配置应用…