Nginx解决跨域访问难题:轻松实现跨域资源共享!

news2024/11/27 0:37:07

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种网络浏览器的安全功能,它限制了一个源(域、协议和端口的三元组)的web页面向另一个源请求资源。这可以防止恶意内容执行跨站请求伪造(CSRF)攻击。然而,在开发过程中,特别是在前后端分离的应用中,我们通常需要允许跨域请求。

1

跨域问题演示

ca5da30959637344e7c2010bcc6ce910.png

1、什么是跨域访问

如果2个服务器节点的协议,域名,端口有一个不同,那么这2台服务器之间互相访问就会出现跨域访问的问题,跨域限制的根本原因是浏览器的限制,浏览器为了安全从而限制跨域访问。

2、跨域示例说明

演示一:

假设Tomcat2服务器部署了一个hello.json文件,里面是一个json格式的数据,用它来模拟跨域访问问题。

hello.json内容如下:

{
"hello":"world"
}

Tomcat1服务器上的index.jsp通过一段js代码要获取到Tomcat2服务器上的hello.json内容,并通过alert输出key=hello的值world。

在Tomcat1服务器的ROOT下上传jquery-2.1.1.min.js文件,在index.jsp文件的head中增加如下代码:

<script src="jquery-2.1.1.min.js"></script>
<script>
$(function(){
$.get("http://192.168.1.10:8080/hello.json",{},function(result){
alert(result.hello);
});            
});
</script>

如下图:

8f2be74da6e72780d4eaec50a47e5d44.png

通过浏览器输入http://192.168.1.9:8080,提示“Failed to load http://192.168.1.10:8080/hello.json: No 'Access-Control-Allow-Origin' ”,说明出现了跨域访问问题

72c186bda8dc0124462e983cc575d04d.jpeg

演示二

如果我们在Tomcat1的index.jsp里通过Nginx代理获取Tomcat2服务器的hello.json文件,是否可行呢?

  1. 修改/data/program/tomcat8/webapps/ROOT目录下的index.jsp文件,把IP地址改为Nginx代理的地址

    <script src="jquery-2.1.1.min.js"></script>
    <script>
            $(function(){
                    $.get("http://192.168.1.8/hello.json",{},function(result){
                            alert(result.hello);
                    });            
            });
    </script>
  2. 修改/data/program/nginx/conf/userconf目录下的proxy.conf配置,注释掉对192.168.1.9:8080的反向代理,为了演示,让其只代理192.168.1.10:8080。

    upstream tomcat8 {
       #server 192.168.1.9:8080;
        server 192.168.1.10:8080;
    }
    
    server{
        listen 80;
        server_name localhostdomin;
        location / {
            proxy_pass http://tomcat8;
        }
        location ~* .+\.(js|css|png|svg|ico|jpg)$ {
            root static_resource;
            expires 1d;
        }
    }
  3. 重启Nginx服务器,通过浏览器输入http://192.168.1.9:8080,提示“Failed to load http://192.168.1.8/hello.json: No 'Access-Control-Allow-Origin'”,说明依然存在跨域访问问题。

2

Nginx解决跨域请求问题

ad0967a4cc5c6e109b4825011874db75.png

通过nginx的配置解决以上出现的跨域问题

再次修改/data/program/nginx/conf/userconf目录下的proxy.conf配置,通过add_header设置解决跨域访问问题

upstream tomcat8 {
   #server 192.168.1.9:8080;
    server 192.168.1.10:8080;
}

server{
    listen 80;
    server_name localhostdomin;
    location / {
        proxy_pass http://tomcat8;
        add_header 'Access-Control-Allow-Origin' '*';                
        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';
        add_header 'Access-Control-Allow-Header' 'Content-Type,*';
    }
    location ~* .+\.(js|css|png|svg|ico|jpg)$ {
        root static_resource;
        expires 1d;
    }
}

如下图:

546cbe58f5956fc6ff4f126ab0012536.png

保存配置,并重启Nginx服务器

通过浏览器输入http://192.168.1.9:8080,可以弹出world的值,如下:

74583acf4d23077c167918da7bd2abb2.jpeg

因此,说明通过nginx的配置,我们解决了上面的跨域访问问题,可以正常获取到Tomcat2服务器上的json资源。

注:上面的网页没有样式,是因为之前我们把Tomcat里面的静态资源挪走导致的。

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

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

相关文章

算法----BF算法KMP算法

请想象一个情景&#xff1a; 当你脑海中突然浮现出一个词&#xff0c;你该怎么去找到这个词的有关内容&#xff1f; 打开我们浏览器的搜索框&#xff0c;输入你想的这个词&#xff0c;然后点击Enter。浏览器就会自动搜索与该词匹配的内容。 这个过程实际上可以简化成以下形式…

常用的时间序列分析方法总结和代码示例

时间序列是最流行的数据类型之一。视频&#xff0c;图像&#xff0c;像素&#xff0c;信号&#xff0c;任何有时间成分的东西都可以转化为时间序列。 在本文中将在分析时间序列时使用的常见的处理方法。这些方法可以帮助你获得有关数据本身的见解&#xff0c;为建模做好准备并…

删除docker的容器与镜像

如果您想要卸载通过 docker pull influxdb 命令下载的 InfluxDB 容器&#xff0c;您需要执行以下步骤&#xff1a; 1. **停止正在运行的 InfluxDB 容器**&#xff1a; 首先&#xff0c;您需要停止任何正在运行的 InfluxDB 容器。您可以使用以下命令来查找正在运行的 InfluxD…

15 JavaScript学习:循环

JavaScript循环语句概念和分类 JavaScript中的循环语句用于重复执行特定的代码块&#xff0c;直到指定的条件不再满足。下面是JavaScript中常用的循环语句以及它们的概念和分类&#xff1a; for 循环&#xff1a;for循环通过指定起始条件、循环条件和递增/递减步长来进行迭代。…

C++程序在Windows平台上各种定位内存泄漏的方法

一、前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏&#xff0c;因为Linux在开发领域的使用场景大多是跑服务器&#xff0c;再加上它的开源属性&#xff0c;相对而言&#xff0c;处理问题容易形成“统一”的标准。而在Windows平台&#xff0c;服务器和客户端…

云计算时代:SFP、SFP+、SFP28、QSFP+和QSFP28光纤模块详解

随着数据中心的快速发展和云计算的广泛应用&#xff0c;高速、高效率的光纤网络传输成为关键需求。在众多光纤模块中&#xff0c;SFP、SFP、SFP28、QSFP和QSFP28是最常见的几种类型。本文将为您详细解析这几种光纤模块之间的区别&#xff0c;帮助您更好地了解和选择适合自己需求…

VS2019中配置C++ OpenCV 4.5.4完整指南

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

C# 图像处理 添加水印

方法1&#xff0c;使用自带的画刷进行绘制水印 示例代码 public partial class Form1 : Form{public Form1(){InitializeComponent();}string photoPathstring.Empty;Bitmap image null;private void button1_Click(object sender, EventArgs e) //选择照片{OpenFileDialog d…

JavaWeb-自学JSP组件报告

自学JSP组件报告 一、组件资源及作用 1. commons-fileupload-1.2.2.jar 组件作用&#xff1a;用于处理HTTP文件上传请求&#xff0c;提供了文件上传的解析和存储功能。它允许开发者在Web应用中轻松实现文件上传功能。 2. commons-io-2.4.jar 组件作用&#xff1a;提供了一…

免单优选:电商销售新模式,低门槛高回报引领消费热潮

免单优选&#xff0c;一种颠覆传统的电商销售新模式&#xff0c;其核心在于通过价格优化策略、创新的奖励机制以及社交网络的深度应用&#xff0c;来激发消费者的购买欲望&#xff0c;进而推动销售实现快速增长。 一、坚守法律底线&#xff0c;打造透明奖励体系 免单优选模式坚…

POCEXP编写—POC编写实战

POC&EXP编写—POC编写实战 1. 概念引入2. POC编写2.1. GET与POST2.2. thinkcmf文件包含(Get请求)2.2.1. POC验证2.2.1.1. 漏洞存在复现 2.2.2. 编写POC2.2.2.1. 脚本报错2.2.2.2. 脚本美化2.2.2.3. 脚本测试2.2.2.4. 注意事项 2.3. Struts2 S2-061 远程命令执行漏洞(Get请求…

Hot 100总结【leetcode】

文章目录 哈希1. 1 两数之和2. 49 字母异或词分组3. 128 最长连续序列4. 283 移动零5. 11 盛最多水的容器6. 15 三数之和7. 42 接雨水 滑动窗口8. 3 无重复的最长子串9. 438 找到字符串中所有字母异位词子串10. 560 和为k的子数组11. 239 滑动窗口最大值12. 76 最小覆盖子串 普…

SpringBoot + kotlin 协程小记

前言&#xff1a; Kotlin 协程是基于 Coroutine 实现的&#xff0c;其设计目的是简化异步编程。协程提供了一种方式&#xff0c;可以在一个线程上写起来像是在多个线程中执行。 协程的基本概念&#xff1a; 协程是轻量级的&#xff0c;不会创建新的线程。 协程会挂起当前的协…

KT-0850 三箱社交箱

01简介 社交一般指社会交往。 社会交往 &#xff0c;简称“社交”&#xff08;socializing&#xff09;&#xff0c;是指在一定的历史条件下&#xff0c;个体之间相互往来&#xff0c;包括物质、精神交流的社会活动。三箱社交(Three-chamber Sociability)箱行为实验是一种经典…

【蓝桥2025备赛】容斥原理

容斥原理 背景&#xff1a;两个集合相交 高中的韦恩图&#xff0c;我们知道两个集合相交时我们可以通过简单的计算来认识相关的性质 集合相交的区域是 A ∩ B A\cap B A∩B ,集合的并集是 A ∪ B A\cup B A∪B ,那怎么用集合表示 A ∪ B A\cup B A∪B 我们可以看作是A集合…

【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化

到项目初始化过程了&#xff0c;这边的项目设计完全按照作者自己的喜好来进行定义和设置的&#xff0c;所以各位完全可以按照自己的偏好自喜设置哈。 首先是创建一个工作文件夹哈。 别问为啥不直接quickstart&#xff0c;因为quickstart生成的api名字是greet&#xff0c;改起来…

Springboot3集成Web、RedisTemplate、Test和knife4j

本例将展示&#xff0c;如何在Springboot3中完成&#xff1a; Redis功能的Web接口实现构建Redis功能的单元测试knife4j自动化生成文档 Redis功能 Pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

02 贪吃蛇

前言 呵呵 这是不知道 在哪里看到的 别人做的一个贪吃蛇 因此 也把我 之前的 贪吃蛇 移植上来了 当然 这个不过是为了 简单的入门了解, 呵呵 然后 c版本的贪吃蛇 需要先移植成 c 版本, 然后 再根据 单片机相关 设计调整 比如 led 点阵的输出, 比如 c99 语法的一些不兼容…

分布式密钥生成

可验证且无经销商 分布式密钥生成 (DKG) 是一种加密协议&#xff0c;使多方能够协作生成共享密钥&#xff0c;而无需任何一方完全了解密钥。 它通过在多个参与者之间分配信任来增强各种应用程序的安全性&#xff0c;从而降低密钥泄露的风险。 我们引入了一种可验证且无经销商的…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的&#xff0c;原码反码补码都相同 我们来看看负数&#xff1a; 以-5为例 原码&#xff1a;10000000 00000000 00000000 0…