nginx代理解决跨域问题

news2024/11/24 15:34:23

文章目录

  • 一、什么是跨域、跨域问题产生的原因
  • 二、注意事项
  • 三、nginx代理解决
  • 总结


一、什么是跨域、跨域问题产生的原因

跨域(Cross-Origin)是指在 Web 开发中,一个网页的运行脚本试图访问另一个网页的资源时,这两个网页的域名、协议或端口号任何一个不同,就被称为跨域。跨域是由浏览器的同源策略(Same-Origin Policy)所限制的。

同源策略是一种安全机制,它防止一个网页的脚本去读取另一个不同域名的网页内容。同源策略要求两个网页的协议、主机和端口号必须完全相同,否则就会出现跨域问题。简单来说,同源策略要求不同域名的网页之间不能相互访问对方的资源。

同源策略主要是基于如下可能的安全隐患:

1.Cookie、LocalStorage 和 IndexedDB 的访问限制:如果不使用同源策略,恶意网站可以通过脚本访问其他域名下的 Cookie、LocalStorage 或 IndexedDB 数据,从而获取用户的敏感信息。

2.DOM 访问限制:恶意网站可以通过脚本访问其他域名下的 DOM,执行恶意操作或窃取敏感信息。

3.Ajax 请求限制:跨域的 Ajax 请求可以被恶意网站用来执行 CSRF(跨站请求伪造)攻击,从而以用户身份执行未经授权的操作。

4.跨域资源加载限制:如果不受同源策略限制,恶意网站可以加载其他域名下的资源(如图片、样式表、脚本),可能用于执行 XSS(跨站脚本)攻击或其他类型的攻击。

跨域问题在前端开发中经常会遇到,比如当一个网页通过 AJAX 请求获取另一个域名下的数据时,由于跨域限制,请求会被浏览器拒绝。为了解决跨域问题,可以通过在服务器端设置相应的跨域资源共享(CORS)策略,或者使用 JSONP、代理服务器等方法来实现跨域请求。

这里选用nginx代理解决。


二、注意事项

注意:
1.请求如果跨域的话不是请求无法发出,请求可正常发出,而且服务端能收到请求并正常返回结果,但是被浏览器拦截了。

2.前端不能解决跨域问题,解决思路一般都是通过 JSONP、代理服务器解决。

3.在使用 JSONP 或代理服务器等方法解决跨域问题时,需要注意安全性。JSONP 存在安全风险,因为它是通过动态创建

4.使用代理服务器或其他方式解决跨域问题可能会增加额外的网络请求,从而增加服务器负担和网络延迟。在设计解决方案时,需要权衡这些因素,并选择最合适的方法。

5.CORS 配置注意事项:如果选择使用 CORS 来解决跨域问题,需要注意正确配置 CORS。不正确的配置可能会导致安全风险或者出现其他问题。例如,应该仅允许信任的域名访问资源,而不是开放所有域名的访问权限。

6.浏览器兼容性:跨域解决方案在不同的浏览器中可能有不同的行为或兼容性问题。在选择解决方案时,需要考虑目标用户的浏览器环境,并确保选择的方法在各种主流浏览器中能够正常工作。

7.性能影响:跨域解决方案可能会对性能产生影响,特别是在网络环境较差或请求频繁的情况下。需要评估解决方案对性能的影响,并在必要时进行优化。

三、nginx代理解决

通过 Nginx 反向代理可以有效地解决跨域问题。下面是一种简单的配置方式:

假设有两个域名为 example.com 和 api.example.com,我们希望在 example.com 上通过 AJAX 请求获取 api.example.com 上的数据,但由于跨域限制,请求被浏览器拦截了。我们可以通过 Nginx 配置反向代理来解决这个问题。

首先,确保 Nginx 已经安装并运行。

编辑 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。

在配置文件中添加以下内容:

server {
    listen 80;
    server_name example.com;

    location /api {
        # 定义代理目标
        proxy_pass http://api.example.com;
        # 允许跨域请求
        add_header Access-Control-Allow-Origin *;
        # 允许带身份验证信息的跨域请求
        add_header Access-Control-Allow-Credentials true;
        # 允许的请求方法
        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 3600;
        # 处理 OPTIONS 请求
        if ($request_method = 'OPTIONS') {
            add_header Content-Type 'text/plain; charset=utf-8';
            add_header Content-Length 0;
            return 204;
        }
    }
}

重启 Nginx 以使配置生效

总结

希望能够帮助到你,欢迎指正进一步优化,希望大家一起进步,不喜勿喷。
在这里插入图片描述

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

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

相关文章

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

springboot多模块

这里springboot使用idea中的 Spring Initializr 来快速创建。 一、demo 1、创建父项目 首先使用 Spring Initializr 来快速创建好一个父Maven工程。然后删除无关的文件,只需保留pom.xml 文件。 (1)new Project -> spring initializr快…

FPGA时钟资源详解(1)——时钟Buffer的选择

FPGA时钟系列文章总览:FPGA原理与结构(14)——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、时钟Buffer的选择 2.1 BUFG 2.2 BUFR 和 BUFIO 2.2.1 源同步接口的支持 2.2.2 扩展时钟域…

StringRedisTemplate与RedisTemplate详解【序列化的方式不同】

spring 封装了 RedisTemplate 对象来进行对redis的各种操作&#xff0c;它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用&#xff0c;分别是: private ValueOperations<K, V> valueOps; private HashOperations<K, V> hashOps; …

Python-open3d点云配准

文章目录 ICP算法鲁棒核ICP测试 ICP算法 ICP, 即Iterative Closest Point, 迭代点算法。 ICP算法有多种形式&#xff0c;其中最简单的思路就是比较点与点之间的距离&#xff0c;对于点云 P { p i } , Q { q i } P\{p_i\}, Q\{q_i\} P{pi​},Q{qi​}而言&#xff0c;如果二者…

《Mahjong Bump》

Mahjong Bump 类型&#xff1a;Tile 三消 视角&#xff1a;2d 乐趣点&#xff1a;清空杂乱快感&#xff0c;轻松的三合一休闲 平台&#xff1a;GP 时间&#xff1a;2021 个人职责&#xff1a; 所有程序部分开发 上架 GooglePlay 相关工做 针对游戏数据做出分析&#xff0c;讨论…

Keil5快速使用

注册机链接如下 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;xim0 --来自百度网盘超级会员V4的分享 ① 打开Keil5软件 ② 在打开的对话框中复制自己软件的ID&#xff0c;然后粘贴到注册机对应的位置。 ③ 复制到注册机中后点击Generate&#xff08;注意&…

keil:syntax error near?这个报错怎么改?

我第一次学的编程语言是java&#xff0c;当时用eclipse开发环境&#xff0c;后面没学成&#xff0c;转成单片机。 刚开始学51单片机的时候&#xff0c;从强大的开发工具eclipse转变到像远古石器一样的Keil&#xff0c;还是挺不习惯的。 除了不会自动补全之类的基础功能以外&…

PostgreSQL FDW(外部表) 简介

1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…

Linux基础IO(操作系统层面理解文件)

目录 一、认识 open 函数 1.1 理解文件 1.2 open 函数 1.3 函数选项和宏 二、 open 函数的返回值 三、 fd 的本质 3.1 各部分内容及关系 3.2 如何确定进程对应文件 四、Linux 一切皆文件&#xff1f; 一、认识 open 函数 在C语言中学习文件操作时&#xff0c;我们学…

基于java+springboot+vue实现的超市在线销售系统(文末源码+Lw+ppt)23-356

摘 要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统超市在线销售采取了人工的管理方法&a…

MYSQL8.0安装、配置、启动、登入与卸载详细步骤总结

文章目录 一.下载安装包1.方式一.官网下载方式二.网盘下载 二.解压安装三.配置1.添加环境变量 三.验证安装与配置成功四.初始化MYSQL五.注册MySQL服务六.启动与停止MYSQL服务七.修改账户默认密码八.登入MySQL九.卸载MySQL补充&#xff1a;彻底粉碎删除Mysql 一.下载安装包 1.方…

ZC706+AD9361 运行 open WiFi

先到github上下载img&#xff0c;网页链接如下&#xff1a; https://github.com/open-sdr/openwifi?tabreadme-ov-file 用win32 Disk lmager 把文件写入到SD卡中&#xff0c;这一步操作会把SD卡重新清空&#xff0c;注意保存数据。这个软件我会放在最后的网盘链接中 打开linu…

宁波IATF16949质量管理认证体系如何认证?

&#x1f436;在当今竞争激烈的&#x1f338;汽车市场中&#xff0c;质量已成为企业&#x1f469;‍❤️‍&#x1f48b;‍&#x1f468;生存和发展的关键。IATF16949质量管理认证体系&#x1f34e;作为国际汽车行业认可的&#x1f33a;质量管理标准&#xff0c;已成为企业&…

IDEA设置代码自动提示不区分大小写

1. 打开设置 在 IntelliJ IDEA 中&#xff0c;点击顶部菜单栏的 File–>Settings&#xff08;或者使用快捷键 Ctrl Alt S&#xff09;。 2. 进入设置&#xff1a; 在弹出窗口左侧导航栏中选择 Editor --> General --> Code Completion&#xff0c;取消勾选 “Mat…

机器学习中的 K-Means算法及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点介绍 三、Python代码示例 四、总结 一、简介 K-Means算法是一种经典的无监督学习算法&#xff0c;用于将数据集中的样本分为 K 个不同的类别。K-均值聚类算法的工作原理如下&#xff1a; 随机选择 K 个中心点作为初始聚类中心。将每个样本点分配…

AI 成足球比赛「关键先生」:DeepMind 发布 TacticAI,战术布局实用性高达 90%

在刚刚结束的世界杯预选赛中&#xff0c;国足在天津主场以 4:1 的得分大胜新加坡&#xff0c;一扫上一场在领先优势下被对方逼平的阴霾&#xff0c;也迎来了球队 2024 年的首场胜利。目前&#xff0c;中国队暂居 C 组第 2 位&#xff0c;保住了晋级 18 强赛的希望。 享受胜利喜…

人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景&#xff0c;模型结构介绍。特征金字塔网络&#xff08;FPN&#xff09;是一种深度学习模型结构&#xff0c;主要应用于目标检测任务中&am…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索&#xff0c;确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

《计算机工程与应用》投稿经验2024

要按照官网格式写论文&#xff0c;这会节省很多时间。审稿费120元&#xff0c;本人计算机视觉方向&#xff0c;9页&#xff0c;没有打折&#xff0c;版面费5000&#xff0c;彩图和表格过多的原因。版权协议等论文录用之后再交即可&#xff0c;一审二审的时候不用交&#xff0c;…