Nginx CORS 跨域资源共享问题
## 背景
新项目上线,前后端分离,遇到了跨域资源共享的问题,导致请求根本无法发送到后端,前端和后端貌似只能有一个来处理跨域问题,我们这边要采用nginx来解决跨域问题。
## Nginx的CORS配置
网上好像都是三两行解决问题。可是我这边试了很多次,也没用。
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
## 上最终的配置文件
server
{
listen ;
server_name api.example.com;
index index.jsp index.htm index.html index.do login.vm;
charset utf-;
location /
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.150.184:10000;
}
location /pm/ {
add_header Access-Control-Allow-Origin 'http://pm.example.com';
add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Auth-Token';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
add_header Access-Control-Expose-Headers 'X-Auth-Token';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.150.184:10000/;
if ($request_method = 'OPTIONS') {
add_header Access-Control-Max-Age "" ;
add_header Access-Control-Allow-Origin 'http://pm.example.com';
add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Auth-Token';
add_header Access-Control-Expose-Headers 'X-Auth-Token';
return ;
}
}
access_log /data/logs/example_com_access wwwlog;
error_log /data/logs/example_com_error ;
}
上诉的配置文件中,为何要加if判断呢????
因为POST请求,浏览器会发送一个options的预检请求,主要是将本次的请求头发送给服务端,若服务端允许,再发送真正的POST请求,所以F12看到,经常POST会发送两次请求。因为后端java代码没有对options请求做处理。
导致options接口请求的时候,抱403 forbidden,这里nginx对options的请求直接返回200,不用到达接口层,直接允许POST响应头,即可使得上述失效配置能够生效。
## Nginx proxy_pass详解
参考地址:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
https://segmentfault.com/a/1190000020725137
https://www.hi-linux.com/posts/60405.html
https://blog.csdn.net/weixin_43475207/article/details/90172613
https://blog.csdn.net/envon123/article/details/83270277
http://coderq.github.io/2016/05/13/cross-domain/
https://www.jianshu.com/p/1080014a234f
Nginx CORS 跨域资源共享问题的更多相关文章
- CORS跨域资源共享
CORS(跨域资源共享)跨域问题及解决 当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Co ...
- CORS跨域资源共享你该知道的事儿
"唠嗑之前,一些客套话" CORS跨域资源共享,这个话题大家一定不陌生了,吃久了大转转公众号的深度技术好文,也该吃点儿小米粥溜溜胃里的缝儿了,今天咱们就再好好屡屡CORS跨域资源共 ...
- 在ASP.NET Web API中实现CORS(跨域资源共享)
默认情况下,是不允许网页从不同的域访问服务器资源的,访问遵循"同源"策略的原则. 会遇到如下的报错: XMLHttpRequest cannot load http://local ...
- django上课笔记7-jQuery Ajax 和 原生Ajax-伪造的Ajax-三种Ajax上传文件方法-JSONP和CORS跨域资源共享
一.jQuery Ajax 和 原生Ajax from django.conf.urls import url from django.contrib import admin from app01 ...
- 跨域漏洞丨JSONP和CORS跨域资源共享
进入正文之前,我们先来解决个小问题,什么是跨域? 跨域:指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器的安全限制! 跨域常见的两种方式,分别是JSONP和CORS. 今天i ...
- 浅谈跨域问题,CORS跨域资源共享
1,何为跨域? 在理解跨域问题之前,你先要了解同源策略和URL,简单叙述: 1)同源策略 三同:协议相同,域名相同,端口相同: 目的:保证用户信息安全,防止恶意网站窃取数据.同源策略是必须的,否则co ...
- 后端程序员之路 45、nginx CORS 跨域
在提供api给其它应用使用时,有时我们会要限制它的跨域使用,而有时,我们又要用CORS来打破AJAX只能同源使用的限制 跨域资源共享 CORS 详解 - 阮一峰的网络日志http://www.ruan ...
- Node.js实现CORS跨域资源共享
什么是CORS CORS(Cross-origin resource sharing),跨域资源共享,是一份浏览器技术的规范,用来避开浏览器的同源策略 简单来说就是解决跨域问题的除了jsonp外的另一 ...
- tomcat7.0配置CORS(跨域资源共享)
平时我们做前台页面时可能会遇到浏览器以下提示(浏览器控制台): 已阻止跨源请求:同源策略禁止读取位于 http://xxx.xxx.com 的远程资源.(原因:CORS 头缺少 'Access-Con ...
随机推荐
- 记一次 Microsoft.Bcl.Async 使用经验
起因: 由于公司项目使用场景存在很多的XP环境,导致使用.NET Framework版本不能大于4.0版本.最近开发新功能时:从nuget上下载一个开源dll(该dll 4.0 版本依赖 Micros ...
- python多进程之multiprocessing
什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...
- 有关 Session 的那些事儿
原文链接: https://blog.by24.cn/archives/about-session.html Web 开发中,Session 是经常用到的概念,但是在日常交流中,似乎又经常引起误解. ...
- 一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起
上帝之火 本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼.每次我都能联想到带来上帝之火的希腊之神,普罗米修斯.而这个开源的logo也是火,个人挺喜欢这个logo的设计. 本 ...
- pandas之数值计算与统计
数值计算与统计 对于DataFrame来说,求和.最大.最小.平均等统计方法,默认是按列进行统计,即axis = 0,如果添加参数axis = 1则会按照行进行统计. 如果存在空值,在统计时默认会忽略 ...
- onepill Android端
使用的框架 第三方登录集成基于ThinkPHP5的第三方登录插件 QQ第三方登录集成QQ互联.qq第三方接入 SharedPreference实现记住账号密码功能参考.参考2
- MyBatis----resultMap的使用
- JS控制语句及小练习
一.控制语句 判断: ①if() {} ; if(){}else{} ; if(){}else if{};…… ② switch(){ case "": break; } 循环: ...
- jstree 权限树 简单教程
第一 :引用.略过 第二 : 初始化: //初始化加载 window.onload = function () { //获取树 信息 todo var result=[{ "id" ...
- PHP range() 函数
实例 创建一个包含从 "0" 到 "5" 之间的元素的数组: <?php$number = range(0,5);print_r ($number);?& ...