跨域问题解决方案

news/2024/5/20 21:33:04

1.为什么会出现跨域的问题

在Web开发中,跨域问题通常指的是浏览器出于安全考虑,限制了从一个源(domain, protocol, port)的网页去请求另一个源的资源。在前后端不分离的情况下,虽然前端可以通过JavaScript调用后端接口,但一旦后端接口是跨域的,浏览器就会阻止这个请求。这是因为浏览器遵循同源策略(Same-origin policy),它不允许来自一个源的网页脚本与另一个源的网页进行数据交互。

tips:前后端不分离的情况下,我们常用的方法就是前端js去调用后端接口,然后后端去调取跨域接口

2.常见的跨域方式

JsonP

JSONP(JSON with Padding)是一种利用<script>标签的跨域数据交互方式。因为<script>标签不受同源策略的限制,所以就可以通过动态创建<script>标签啦,在它的src属性中指定跨域URL来实现跨域数据请求。但JSONP只支持GET请求,并且存在安全风险。

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>JSONP Example</title>  
</head>  
<body>  <script>  function handleResponse(data) {  console.log(data); // 输出: { Name: "John Doe", Age: 30 }  }  // 创建一个新的script标签  var script = document.createElement('script');  
// 设置script标签的src属性为跨域URL,并附带一个回调函数名  script.src = 'https://your-backend-url/api/jsonp?callback=handleResponse';  
// 将script标签添加到DOM中,浏览器会发起跨域请求  document.body.appendChild(script);  
</script>  </body>  
</html>

后端代码

[HttpGet("jsonp")]  
public IActionResult Jsonp(string callback)  
{  var data = new { Name = "John Doe", Age = 30 };  var jsonpCallback = HttpContext.Request.Query["callback"].ToString();  var jsonpResult = $"{jsonpCallback}({Newtonsoft.Json.JsonConvert.SerializeObject(data)})";  return Content(jsonpResult, "application/javascript");  
}

添加请求头实现跨域

通常指的是后端服务器在响应头中添加一些特定的字段(如Access-Control-Allow-Origin),来告诉浏览器这个响应允许哪些源的请求。但是,这种方式需要后端服务器的支持,并且只能由后端来配置。

public class CustomCorsMiddleware  
{  private readonly RequestDelegate _next;  public CustomCorsMiddleware(RequestDelegate next)  {  _next = next;  }  public async Task InvokeAsync(HttpContext context)  {  context.Response.Headers.Add("Access-Control-Allow-Origin", "http://example.com");  // 其他可能的跨域头...  await _next(context);  }  
}  // 在 Startup.cs 的 Configure 方法中注册中间件  
app.UseMiddleware<CustomCorsMiddleware>();

高效CORS

CORS(Cross-Origin Resource Sharing)是W3C推荐的一种跨域资源共享方案,通过浏览器和服务器之间的通信来确定是否允许跨域请求。在.NET Core中,我们可以很方便地使用CORS中间件来实现跨域。

在.NET Core 8中使用CORS

在.NET Core 8(或任何支持CORS的.NET Core版本)中,你可以通过以下步骤来配置CORS:

1. 注入CORS服务

在Startup.cs的ConfigureServices方法中,你需要注入CORS服务并定义跨域策略。

public void ConfigureServices(IServiceCollection services)  
{  // ... 其他服务注入 ...  // 跨域配置  //方法1services.AddCors(options =>  {  options.AddPolicy("LimitRequests", policy =>  {  policy  .WithOrigins("http://example1.com", "http://example2.com") // 允许的源  .AllowAnyHeader() // 允许任何头  .AllowAnyMethod(); // 允许任何方法  });  });  // ... 其他代码 ...  
}

2. 在管道中启用CORS中间件

在Startup.cs的Configure方法中,你需要确保在调用其他中间件(如app.UseMvc()或app.UseRouting())之前启用CORS中间件。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  
{  // ... 其他中间件配置 ...  // 启用CORS中间件  app.UseCors("LimitRequests"); // 使用前面定义的策略名称  // ... 路由和MVC中间件 ...  app.UseRouting();  app.UseEndpoints(endpoints =>  {  endpoints.MapControllers(); // 或其他路由配置  });  // ... 其他代码 ...  
}

注意事项

  • 我们一般建议不在生产环境中去用AllowAnyOrigin、AllowAnyHeader或AllowAnyMethod,这会增加应用面临安全风险的概率。要明确指定允许的源、头和方法。
  • 如果你的应用使用了其他中间件(如MVC、路由、重定向等),确保CORS中间件在它们之前被调用,否则跨域请求可能会失败。
  • 如果你在使用认证/授权中间件(如JWT),并且允许跨域携带凭据(通过设置AllowCredentials()),确保你的CORS策略中指定的源和你的身份验证服务器配置相匹配。

http://www.mrgr.cn/p/16617813

相关文章

百面算法工程师 | 支持向量机面试相关问题——SVM

本文给大家带来的百面算法工程师是深度学习支持向量机的面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习算法工程师面试问题&#xff0c;并提供参考的回答…

Qt QInputDialog详解

1.简介 QInputDialog是一个对话框类&#xff0c;用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框&#xff0c;无需自己从头开始构建。 QInputDialog支持多种输入类型&#xff1…

cluster_网络

cluster 网络service 网络 当service和endpoint被创建时,kube-proxy会自动创建相应的转发规则,使得访问service的请求被转发到endpoint kube-api-server --service-cluster-ip-range ipNet(Default:10.0.0.0/24)

js逆向) 某音cookie中的__ac_signature

原文链接:https://mp.weixin.qq.com/s/NJjU7dqA1g0-_xFmr1nrIg 前言 上一篇文章测试了多个补环境的框架(多个开源的js补环境框架测试),这篇来说一下具体怎么补。用__ac_signature做测试,这个相对简单一点。 逆向 先定位cookie生成的位置,清空cookie然后刷新网页,可以看到有…

开源免费的定时任务管理系统:Gocron

Gocron&#xff1a;精准调度未来&#xff0c;你的全能定时任务管理工具&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 Gocron是github上一个开源免费的定时任务管理系统。它使用Go语言开发&#xff0c;是一个轻量级定时任务集中调度和管理系统&#xff0c;用于替代L…

Outrageously Large Neural Networks The Sparsely-Gated Mixture-of-Experts Layer

目录概MoE训练Shazeer N., Mirhoseini A., Maziarz K., Davis A., Le Q., Hinton G. and Dean J. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. ICLR, 2017.概 Mixture-of-Experts (MoE). MoE通过一 gating network 选择不同的 expert: …

什么样的人能上百度词条

百度百科是一个向所有互联网用户开放的平台&#xff0c;任何人都可以创建或编辑词条。然而&#xff0c;并不是所有的人物或事物都能被收录到百度百科中&#xff0c;它有一定的收录标准和审结的关于哪些人或事物能上百度百科的条件和流程。 百度百科的收录标准 知名度和影响力&…

PV-PVC

PV & PVC https://blog.csdn.net/bdkl9998/article/details/106304255PersistentVolume(PV) 是由管理员设置的存储,是集群的一部分,它不属于任何命名空间 PV的生命周期独立于使用它的pod的生命周期 PV更像是一种储备资源,先创建,有PVC需要它时才会被使用 PV可以是多种类…

emptyDir-gitRepo

emptyDir & gitRepo k8s存储类型分类(卷的类型) 临时存储 emptyDir 用于存储临时数据的简单空目录 gitRepo 通过检出Git仓库的内容来初始化的卷持久存储 hostPath 用于将目录从工作节点的文件系统挂载到pod中 nfs …

STM32 ADC学习

ADC Analog-to-Digital Converter&#xff0c;即模拟/数字转换器 常见ADC类型 分辨率和采样速度相互矛盾&#xff0c;分辨率越高&#xff0c;采样速率越低。 ADC的特性参数 分辨率&#xff1a;表示ADC能辨别的最小模拟量&#xff0c;用二进制位数表示&#xff0c;比如8,10…

中间件集群部署

中间件集群部署中间件集群部署 1)反向网关配置 2)运行反向网关和中间件,开启顺序不分先后3)通过反向网关,以指定负载均衡方式访问中间件 本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18183673

机台数据管控怎么做,能够提高效率促进企业快速发展?

机台数据管控是制造企业信息化管理的重要组成部分&#xff0c;它涉及对生产设备&#xff08;机台&#xff09;所产生的数据进行有效的收集、存储、处理和应用。良好的机台数据管控能够帮助企业提高生产效率、降低成本、优化资源配置以及保障生产安全。以下是机台数据管控的几个…

自定义表单工作流的优势介绍

今天,就跟大家一起分享低代码技术平台以及自定义表单工作流的相关知识。当前,应用低代码技术平台可以助力企业提高效率,降低开发成本,实现个性化场景定制,因而越来越得到了客户的信赖与喜爱。很多客户朋友询问自定义表单工作流的优势和特点,为了帮助大家解决这个疑问,今…

746-便携式8路高频电压电流信号测试仪

便携式8路高频电压电流信号测试仪一、平台简介便携式手提8路高频电压电流信号测试仪,以FPGA AD卡和X86主板为基础,构建便携式的手提设备。FPGA AD卡是以Kintex-7XC7K325T PCIeX4的AD卡,支持8路24bit AD采集。北京太速科技,平台默认操作系统为win7 64位系统;具备丰富的外设…

Unity EventSystem入门

概述 相信在学习Unity中&#xff0c;一定有被UI事件困扰的时候把&#xff0c;当添加UICanvas的时候&#xff0c;Unity会为我们自动添加EventSystem&#xff0c;这个是为什么呢&#xff0c;Unity的UI事件是如何处理的呢&#xff0c;在使用各个UI组件的时候&#xff0c;一定有不…

黑马-Vue前端

前言 HTML:负责网页的结构(标签:form表单 / table表格 / a /div/span) CSS:负责网页的表现(样式:color/font/background/width/height) JavaScript:负责网页的行为(交互效果) 创建一个文件夹 输入cmd执行 code . 回车,打开VsCodeVue 一款用于构建用户界面的渐进式…

自动驾驶中常见坐标系极其转换

各个传感器坐标系 相机坐标系统 摄像头的作用是把三维世界中的形状、颜色信息,压缩到一张二维图像上。基于摄像头的感知算法则是从二维图像中提取并还原三维世界中的元素和信息,如车道线,车辆、行人等,并计算他们与自己的相对位置。 感知算法和相机相关的坐标系有图像坐…

如何判断nat网络?如何内网穿透

大家都清楚&#xff0c;如果你想开车&#xff0c;就必须要给车上一个牌照&#xff0c;随着车辆越来越多&#xff0c;为了缓解拥堵&#xff0c;就需要摇号&#xff0c;随着摇号的人数越来越多&#xff0c;车牌对于想开车的人来说已经成为奢望。在如今的IPv4时代&#xff0c;我们…

在M1芯片安装鸿蒙闪退解决方法

在M1芯片安装鸿蒙闪退解决方法 前言下载鸿蒙系统安装完成后&#xff0c;在M1 Macos14上打开闪退解决办法接下来就是按照提示一步一步安装。 前言 重新安装macos系统后&#xff0c;再次下载鸿蒙开发软件&#xff0c;竟然发现打不开。 下载鸿蒙系统 下载地址&#xff1a;http…

httpsok-v1.11.0支持CDN证书自动部署

🔥httpsok-v1.11.0支持CDN证书自动部署 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业,稳定、安全、可靠。 一行命令,一分钟轻松搞定SSL证书自动续期 v1.11.0 版本新特性✅修复某些情况下无法识别主配置文件n…