nginx配置跨域访问,无法生效_页面跨域访问

nginx配置跨域访问,无法生效_页面跨域访问由于浏览器同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制。即会出现跨域请求禁止。通俗一点说就是如果存在协议、域名、端口或者子域名不同服务端,或一者为IP地址,一者为域名地址(在跨域问题上,域仅仅是通过"url的首部"来识别而不会去尝试判断相同的IP地址对应着两个域或者两个域是否同属同一个IP),之中任意服务端旗下的客户端发起请求其它服务端资源的访问行动都是跨域的,而浏览器为了安全…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

由于浏览器同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制。即会出现跨域请求禁止。

通俗一点说就是如果存在协议、域名、端口或者子域名不同服务端,或一者为IP地址,一者为域名地址(在跨域问题上,域仅仅是通过”url的首部”来识别而不会去尝试判断相同的IP地址对应着两个域或者两个域是否同属同一个IP),之中任意服务端旗下的客户端发起请求其它服务端资源的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。

但很多时候我们却又不得不去跨域请求资源,这个时候就需要我们想方法去绕过浏览器同源策略的限制了。

常见的跨域请求解决方法:

1.Jsonp 利用script标签发起get请求不会出现跨域禁止的特点实现
2.window.name+iframe 借助中介属性window.name实现
3.Cors需要服务器设置header:Access-Control-Allow-Origin
4.Nginx反向代理 可以不需要目标服务器配合,不过需要Nginx中转服务器,用于转发请求(服务端之间的资源请求不会有跨域限制)

Nginx跨域访问解决方案

使用Ajax跨域请求资源,Nginx作为代理,出现以下错误:

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed

解决方法:
使用Nginx作为反向代理服务器,并在配置中对应的location下添加上如下的设置

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header Cache-Control private;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

完整配置如下:

server {
	listen       80; 
	server_name  192.168.16.190;
	root   /home/fastdfs/file/data;
	index  index.htm index.html;
	add_header 'Access-Control-Allow-Origin' '*';
	add_header 'Access-Control-Allow-Credentials' 'true';
	add_header Cache-Control private;
	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
	add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
	
	location / {
		# 此处用于处理 H5 的 History时 重写的问题
		if (!-e $request_filename) {
			rewrite ^(.*) /index.html last;
			break;
		}
	}
	
	# 代理服务端接口
	location /api {
		if ($request_method = 'OPTIONS') {
			add_header Access-Control-Allow-Origin *;
			add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
			return 200;
		}
		proxy_pass http://192.168.16.191:3000/api;   #将真正的请求代理到API 服务地址
	}
	
	location ^~/cross_origin/ {
		rewrite ^/cross_origin/(.*)$ /$1 break;
		if ($request_method = 'OPTIONS') {
			add_header Access-Control-Allow-Origin *;
			add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
			return 200;
		}
		proxy_pass http://192.168.16.191:3000/cross_origin ;   #将真正的请求代理到API 服务地址
	}
}	

服务端允许跨域配置:

#region 设置允许跨域,允许复杂请求
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
	HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS");
	HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
	//HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
	HttpContext.Current.Response.End();
}
#endregion

备注: 如果服务器设置了允许跨域,使用Nginx代理里面就不需要了(或者就不用使用Nginx了)

大家可以参考这个Nginx文档:http://nginx.org/en/docs/http/ngx_http_headers_module.html
cores里面参数含义请参考:https://blog.csdn.net/m0_37886429/article/details/83617880

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187130.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • shell脚本运行jar包获取参数_linux加载一个目录下的所有jar包

    shell脚本运行jar包获取参数_linux加载一个目录下的所有jar包当使用SpringBoot框架时,他自己集成了tomcat。在启动jar包时,经常需要复制一大段命令,尤其是在项目目录发生改变的时候,实在繁琐。所以可以使用shell脚本来启动、关闭和重启Java项目。创建一个shell脚本vim脚本名.sh脚本内容:#!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改JAR_NAME=jar包名称#lib目录LOAD_PATH=”-Dloader.path=/home/local/lib/”#项目配置文件CONFIG_PATH

    2022年9月26日
    1
  • 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!

    肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!前言在下面所有的讲解中,我将会以基本语法,案例,联系形式讲解,从而加强对每一个语句的使用和认识。我就不用贴图方式返回给大家结果了,实在占空间布局。本篇文章是笔者整理了整整一个通宵才写出,希望大家三连好评,谢谢。当然,拥有本篇文章,你将会完全整我mysql的所有语句使用,不再用去购买或者杂乱学习。MYSQL最重要的命令SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERTINTO将新数据插入数据库CREATEDATABASE创建

    2022年4月27日
    42
  • 揭秘vista引导机制

    揭秘vista引导机制揭秘vista引导机制   所谓的引导机制就是在操作系统内核运行前的一小段程序。其主要作用是初始化电脑硬件设备,建立内存空间的映射图。从而将系统的软件和硬件设备环境调配到一个适合的状态,以使电脑最终调用系统内核而准备好适合的环境。   那么vista的引导机制是否和以前的windows的版本不同呢?其实vista引导机制是一项全新的技术。以前寄予nt的windows系统采用“ntl

    2022年10月10日
    1
  • Vim查找命令及快捷键

    Vim查找命令及快捷键Vim查找命令及快捷键一、通过指令查找 1、左斜杠/ 从光标所在位置向文件尾搜索  例:/hello   2、问号? 从光标所在位置向文件头搜索  例:/hello   注:/和?均可加参数做指定查找(两者搜索方向不同,此处以/举例进行说明)    1) \<匹配单词的开头 \>匹配单词的结尾  例: \<hel

    2022年6月17日
    76
  • sklearn库的功能_numpy库

    sklearn库的功能_numpy库sklearn是目前python中十分流行的用来实现机器学习的第三方包,其中包含了多种常见算法如:决策树,逻辑回归、集成算法等。即使你还不太懂机器学习的具体过程,依旧可以使用此库进行机器学习操作,因为其对各种算法进行了良好的封装,可以在不了解算法实现过程的情况下使用算法,所以可以把sklearn库当作学习过程中的一个过度,如果你想快速建立一个模型,这也是一个不错的选择。数据导入skle…

    2022年10月17日
    2
  • 爱比较病毒测试(不是震网病毒特点的是)

    CIH、爱虫、冲击波、熊猫烧香,对这4种网络病毒你了解多少?现在的网络病毒能够分为三类,第一类是“蠕虫”病毒,这类型的病毒是在感染电脑后经过不停地复制自己,将电脑原来的运行和储存资源耗费掉,最终电脑由于资源耗费干净而无法运行直至死机;第二类是“进犯型”病毒,这类病毒和蠕虫病毒不一样,进犯型病毒一旦感染就会对电脑软件甚至是硬件做出破坏性的进犯,威力和破坏性极端强大。最终第三类是“木马”类病毒,这类病…

    2022年4月14日
    261

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号