百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

「Nginx」使用Nginx如何解决跨域问题?看完这篇原来很简单

off999 2025-01-06 14:49 30 浏览 0 评论

写在前面

当今互联网行业,大部分Web项目基本都是采用的前后端分离模式。前端为H5项目,后端为Java、PHP、Python等项目。而且大部分后端服务并不会只部署一套服务,而是会采用Nginx对后端服务进行负载均衡。那么,此时就会出现一个问题了:如果一个请求url的 协议、域名、端口 三者之间任意一个与当前页面url不同就会产生跨域的现象。那么如何使用Nginx解决跨域问题呢?接下来,我们就一起探讨下这个问题。

为何会跨域?

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

Nginx如何解决跨域?

这里,我们利用Nginx的反向代理功能解决跨域问题,至于,什么是Nginx的反向代理,大家就请自行百度或者谷歌吧。

Nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url。而Nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

Nginx解决跨域案例

使用Nginx解决跨域问题时,我们可以编译Nginx的nginx.conf配置文件,例如,将nginx.conf文件的server节点的内容编辑成如下所示。

server {
        location / {
            root   html;
            index  index.html index.htm;
            //允许cros跨域访问
            add_header 'Access-Control-Allow-Origin' '*';

        }
        //自定义本地路径
        location /apis {
            rewrite  ^.+apis/?(.*)nbsp;/$1 break;
            include  uwsgi_params;
            proxy_pass   http://www.binghe.com;
       }
}

然后我把项目部署在nginx的html根目录下,在ajax调用时设置url从http://www.binghe.com/apistest/test 变为 http://www.binghe.com/apis/apistest/test然后成功解决。

假设,之前我在页面上发起的Ajax请求如下所示。

$.ajax({
        type:"post",
        dataType: "json",
        data:{'parameter':JSON.stringify(data)},
        url:"http://www.binghe.com/apistest/test",
        async: flag,
        beforeSend: function (xhr) {

            xhr.setRequestHeader("Content-Type", submitType.Content_Type);
            xhr.setRequestHeader("user-id", submitType.user_id);
            xhr.setRequestHeader("role-type", submitType.role_type);
            xhr.setRequestHeader("access-token", getAccessToken().token);
        },
        success:function(result, status, xhr){

        }
        ,error:function (e) {
            layerMsg('请求失败,请稍后再试')
        }
    });

修改成如下的请求即可解决跨域问题。

$.ajax({
        type:"post",
        dataType: "json",
        data:{'parameter':JSON.stringify(data)},
        url:"http:www.binghe.com/apis/apistest/test",
        async: flag,
        beforeSend: function (xhr) {

            xhr.setRequestHeader("Content-Type", submitType.Content_Type);
            xhr.setRequestHeader("user-id", submitType.user_id);
            xhr.setRequestHeader("role-type", submitType.role_type);
            xhr.setRequestHeader("access-token", getAccessToken().token);
        },
        success:function(result, status, xhr){

        }
        ,error:function (e) {
            layerMsg('请求失败,请稍后再试')
        }
    });

好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!!

写在最后

如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!

相关推荐

腾讯手机管家电脑版(腾讯手机管家电脑版官方下载)

手机管家关闭电脑的方法。首先,打开电脑管家主页面。2.再点击“更多选项”图标。3.然后,点击“设置”。4.选择“手机管理”。5.勾选“不需要提醒”。6.再单击“确定”。7.最后,我们关闭面...

腾讯qq最新版下载(腾讯qq下载2019 8.0版)

可能是网速问题!或者你先看看你是否已经下载安装了QQ游戏,是不是最新的版本,如果之前没问题的话你不要到QQ页面进QQ游戏,试试从我的电脑中的文件夹中进入,再不行的话或者重新安装下QQ游戏:再不行的话建...

qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
樱花校园模拟器中文版下载(樱花校园模拟器 下载)

1可以在应用商店搜索“校女园模拟器”下载最新版本。2原因是应用商店会及时更新最新版本,而且下载安装十分方便快捷。3如果在应用商店找不到最新版本,可以在官方网站进行下载,但需要注意安全问题。同时,...

单机斗地主 单机版 免费版下载

免费的单机斗地主有《欢乐斗地主单机版》联众《单机斗地主》。1,《欢乐斗地主单机版》《欢乐斗地主单机版》是根据欢乐斗地主规则改编的pc电脑单机游戏。这是789游戏中心好玩的斗地主游戏,电脑具有较高的人工...

腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
三国志5手机版单机游戏(三国志5手机版单机游戏有哪些)

1.提示DirectX的话--下载驱动人生更新驱动重启,保证能玩2.如果不是上面问题试下--右键游戏图标,属性,兼容性,禁用桌面元素钩上就OK了3.发现安装后桌面的启动图标是GameSt...

免费的视频app网站入口(免费的视频app网站入口)

柠檬影院是个网站,柠檬影视是个软件柠檬影院是一个真正免费看电影电视剧的影视网站,以提供高清影视在线观看,下载,网络休闲等为最终发展目标,致力于给广大的互联网用户带来最丰富影视柠檬影院每日实时更新,每日...

光影魔术手手机版下载(光影魔术手手机版下载 app)

1、打开光影魔术手软件,点击“打开”。2、选好需要去除文字的图片,插入光影魔术手中。3、然后点击左上角的“数码暗房”按钮。4、在打开的页面中选择“人像”。5、下拉菜单,在“人像”中选择“祛斑”按钮。6...

电视直播中央一台(电视直播中央一台开学第一课)

如果我们想在电脑或手机上观看中央电视台一套直播,只要用爱奇艺pps就可以了。1、点击进入应用商店,在搜索框中输入“爱奇艺”,点击搜索,并安装。2、安装结束后,在手机或电脑主页面找到爱奇艺图标,点击进入...

远程控制软件哪个好用(免费远程控制软件哪个好用)

一、UPDF——PDF文档处理分享二、腾讯会议——远程开会三、向日葵——远程控制四、Github——代码协同五、Snipaste——屏幕截图六、Canva——在线设计工具七、博思白板BoardM...

魔兽世界手游官网公测(魔兽世界手游官网公测 新闻)

2005年4月26日2005年4月26日由九城代理的《魔兽世界》国服开启公测,6月9日国服正式运营。2009年4月,暴雪将《魔兽世界》在国服的代理运营权由九城转交给网易。

qq2012(qq2012旧版本下载)

建议你升级到最新版本,因为一般来说旧版本都不会怎么更新、维护,容易出现BUG!

香蕉加速器(香蕉加速器怎么样)

OPPO系统自带的游戏加速器是HyperBoost据OPPO介绍,HyperBoost是OPPO花了三年时间自主研发的一项技术,由系统引擎、应用引擎和游戏引擎三部分组成,能够实现全场景系统,提升...

小说下载txt电子书免费全本下载

因为违规了。久久小说网的许多小说,都没有作者的授权而且他的名声太大了,被人给投诉然后违规追究了,就关闭了这个网站。所以平时看小说的时候,尽量到正版的网站去看,一些大网站,或者是一些小网站都可以去瞅一瞅...

取消回复欢迎 发表评论: