nginx代理解决跨域问题

文章目录

  • 一、什么是跨域、跨域问题产生的原因
  • 二、注意事项
  • 三、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.mzph.cn/news/777309.shtml

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

相关文章

蓝桥杯省三保底代码——数显+按键功能实现

目录 前言 一、为什么能保底省三 二、数显模块的实现 1.数码管显示​编辑 1)断码表 2)位选 3)段选 4)扫描 2.菜单 三、按键功能的实现 1.按键扫描 2.菜单切换 四、完整代码演示 五、结语 前言 上一期介绍全家桶时&…

【书生·浦语大模型实战营第二期】学习笔记1

1. Introduction 开源llm举例:LLaMA 、Qwen 、Mistral 和Deepseek 大型语言模型的发展包括预训练、监督微调(SFT)和基于人类反馈的强化学习(RLHF)等主要阶段 InternLM2的显著特点 采用分组查询注意力(GQA…

IP组播基础

原理概述 IANA ( Internet Assigned Numbers Authority )将 IP 地址分成了 A 、 B 、 C 、 D 、 E5类,其中的 D 类为组播 IP 地址,范围是224.0.0.0~239.255.255.255。 一个 IP 报文,其目的地址如果是单播 IP 地址&#xff…

螺旋矩阵的算法刷题

螺旋矩阵的算法刷题 本文主要涉及螺旋矩阵的算法 包括三个题目分别是 59. 螺旋矩阵 II54. 螺旋矩阵 中等LCR 146. 螺旋遍历二维数组 文章目录 螺旋矩阵的算法刷题一 、螺旋矩阵简单1.1 实现一(我认为这个方法更巧妙!!)1.2 实现二&…

短视频矩阵系统--技术3年源头迭代

短视频矩阵系统核心技术算法主要包括以下几个方面: 1. 视频剪辑:通过剪辑工具或API从各大短视频平台抓取符合要求的视频。这些视频通常符合某些特定条件,如特定关键词、特定时间段发布的视频、视频点赞评论转发等数据表现良好的视频。 2. 视…

2024年【熔化焊接与热切割】报名考试及熔化焊接与热切割模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割报名考试考前必练!安全生产模拟考试一点通每个月更新熔化焊接与热切割模拟试题题目及答案!多做几遍,其实通过熔化焊接与热切割作业考试题库很简单。 1、【单选题】…

基于随机森林与LSTM神经网络的住宅用电比较分析及预测 代码+论文 完整毕设

摘要 本文旨在探讨基于随机森林(Random Forest)与长短期记忆神经网络(Long Short-Term Memory, LSTM)的住宅用电比较分析及预测方法。随机森林是一种集成学习方法,通过构建多个决策树进行预测,具有较强的鲁…

[疑难杂症2024-002]一个“显而易见“的问题,是如何进入生产环境的?

本文由Markdown语法编辑器编辑完成。 1. 前言 最近在处理一个在医院上线的系统的问题。这个问题,由于关联的模块比较多,至少涉及到3个模块之间的功能调用。因此,协调大家都有时间来排查问题不是很方便。这个问题就拖了有一周左右。医院那边…

钡铼技术R40路由器助力智能船舶航行数据实时传输与分析

钡铼技术R40路由器在智能船舶领域的应用,对于航行数据的实时传输与分析具有重要意义。随着航运业的不断发展和智能化水平的提升,船舶航行数据的及时传输和有效分析对船舶的安全、运营效率等方面至关重要。而引入钡铼技术R40路由器,则可以实现…

libVLC 捕获鼠标、键盘事件

在实现播放器的时候,我们需要捕获键盘、鼠标事件进行视频快进、快退,或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下,在使用libVLC库的时候,我们无法捕获这些事件,因为我们将Qt的视频窗口传递给了libVLC。…

工厂数据分析系统用这个开源库准没错

ScottPlot是一款简单易用、高度定制、性能卓越的.NET绘图库,支持跨平台操作。除提供标准图表类型外,还支持交互式操作,呈现生动的数据展示。在工厂数字化系统中,可用于生产数据可视化、设备监测和质量控制。无论用于科学研究、数据…

Springboot基础之——自定义starter

引言 在实际开发中,经常会定义一些公共的组件,提供给各个项目团队使用。而在SpringBoot项目中,一般会将这些公共组件封装成SpringBoot的starter。 如果想要自定义starter的话,就要先了解自动配置原理。 1 自动配置原理 1.1 什…

地物波谱库共享网站汇总

ENVI自5.2版本重新梳理了原有的标准波谱库,新增一些物质波谱,在ENVI5.6中存放在…\Harris\ENVI56\ resource\speclib,分别存放在四个文件夹中,储存为ENVI波谱库格式,有两个文件组成:.sli和.hdr。 ENVI保留…

代码随想录——搜索插入位置(Leetcode35)

题目链接 class Solution {public int searchInsert(int[] nums, int target) {int len nums.length;int left 0;int right len - 1;int index -1;while(left < len / 2){if(nums[left] target || target < nums[left]){index left;break;}else{left;}if(nums[ri…

通过Caliper进行压力测试程序,且汇总压力测试问题解决

环境要求 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限;操作系统版本需要满足以下要求:Ubuntu >= 16.04、CentOS >= 7或MacOS >= 10.14;部署Caliper的计算机需要安装有以下软件:python 2.7、make、g++(gcc-c++)、gcc及git。第二步. 安装NodeJS # …

高效 CUDA 调试:将 NVIDIA Compute Sanitizer 与 NVIDIA 工具扩展结合使用并创建自定义工具

高效 CUDA 调试&#xff1a;将 NVIDIA Compute Sanitizer 与 NVIDIA 工具扩展结合使用并创建自定义工具 NVIDIA Compute Sanitizer 是一款功能强大的工具&#xff0c;可以节省您的时间和精力&#xff0c;同时提高 CUDA 应用程序的可靠性和性能。 在 CUDA 环境中调试代码既具有挑…

超详细的fiddler教程

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Fiddler&#xff08;中文名称&#xff1a;小提琴&#xff09;是…

【算法题】三道题理解算法思想--滑动窗口篇

滑动窗口 本篇文章中会带大家从零基础到学会利用滑动窗口的思想解决算法题&#xff0c;我从力扣上筛选了三道题&#xff0c;难度由浅到深&#xff0c;会附上题目链接以及算法原理和解题代码&#xff0c;希望大家能坚持看完&#xff0c;绝对能有收获&#xff0c;大家有更好的思…

win11 安装SIBR 3dgs

1.安装显卡驱动 下载地址&#xff1a; 官方驱动 | NVIDIA下载适用于 GeForce、TITAN、NVIDIA RTX、数据中心、GRID 等 NVIDIA 产品的新驱动。https://www.nvidia.cn/Download/index.aspx?langcn 2.安装cuda 下载地址&#xff1a;如果无法打开&#xff0c;切换.com为.cn&am…