当前位置: 首页 > news >正文

跨域问题(CORS)

文章目录

  • 介绍
  • 解决
    • 一、添加跨域头,允许跨域
      • 1.后端配置CORS策略(4种方法)
      • 2.配置nginx
    • 二、代理

介绍

跨域资源共享(CORS, Cross-Origin Resource Sharing)是浏览器的一个安全机制,用来防止来自一个域的网页对另一个域下的资源进行请求。仅允许向 同域名同端口 的服务器发送请求。
对于前后端分离的项目,往往会有跨域问题。

解决

一、添加跨域头,允许跨域

1.后端配置CORS策略(4种方法)

浏览器检测到跨域请求时,会先发送一个预检请求(OPTIONS)给后端服务器,若后端配置了CORS策略,即返回允许的 CORS 头(如 Access-Control-Allow-Origin)来告诉浏览器它允许跨域请求。如果服务器未返回这些头,浏览器将阻止实际请求。如果预检请求成功,浏览器将继续发送实际的请求。如果服务器的响应中没有正确的 CORS 头,浏览器同样会阻止实际请求的返回数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.配置nginx

#跨域配置
location /api {add_header 'Access-Control-Allow-Origin' $http_origin;add_header 'Access-Control-Allow-Credentials' 'true';add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers '*';if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Origin' $http_origin;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;}
}

二、代理

代理的原理是,由于CORS检测只会在客户端进行,只需要前端的请求也是同域名同端口即可,前端发送请求到代理服务器,这个代理服务器和前端服务器的域名和端口一致,不会触发CORS,然后代理服务器再将请求转发给后端服务器即可。

开发环境: 前端使用代理,简化开发过程中的跨域问题。
代理的实质是转发请求,前端请求到代理时浏览器会认为是同源,不会触发跨域限制,之后代理服务器再将请求转发给后端服务器。
比如proxy.ts文件里的
在这里插入图片描述

生产环境:
可使用Nginx或其他反向代理服务器

location /api {proxy_pass http://127.0.0.1:8080;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【English】长难句翻译
  • 《论面向服务架构设计及其应用》写作框架,软考高级系统架构设计师
  • openSUSE变更默认编译器
  • 微信小程序项目开发【从0到1~入门篇】
  • Codigger 携手 Jupyter:革新数据科学与编程体验
  • 直播电商系统卷轴模式源码开发的发展前景
  • GitHub每日最火火火项目(9.11)
  • 网络药理学:分子对接之二:PDB数据库的使用(已知PDB ID)、PubChem数据库如果没有3D结构
  • GAMES104:14 引擎工具链高级概念与应用-学习笔记
  • 2024软件测试必问的常见面试题1000问!
  • LINQ 和 LINQ扩展方法 (1)
  • web杂项
  • 智慧平台赋能政务管理,声通科技助力政务管理智能化
  • 逆向基础一阶段检测-1
  • 等待唤醒机制和阻塞队列
  • 2017前端实习生面试总结
  • 30天自制操作系统-2
  • C++入门教程(10):for 语句
  • C语言笔记(第一章:C语言编程)
  • Docker: 容器互访的三种方式
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • mysql常用命令汇总
  • Python进阶细节
  • 大快搜索数据爬虫技术实例安装教学篇
  • 基于 Babel 的 npm 包最小化设置
  • 聚簇索引和非聚簇索引
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 入口文件开始,分析Vue源码实现
  • 探索 JS 中的模块化
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 关于Android全面屏虚拟导航栏的适配总结
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Python第六天)文件处理
  • (pytorch进阶之路)扩散概率模型
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (六)激光线扫描-三维重建
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)负载均衡,回话保持,cookie
  • (转)树状数组
  • (转载)hibernate缓存
  • *p++,*(p++),*++p,(*p)++区别?
  • .JPG图片,各种压缩率下的文件尺寸
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net core 管理用户机密
  • .NET Framework杂记
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)