打赏

星辰大海ゞ

That which does not kill us makes us stronger!

导航

Nginx配置跨域支持功能

涉及到多重跨域的话,项目访问会出现无法跨域的报错

即Java代码部分,需要进行注释掉:

//@CrossOrigin(allowCredentials = "true")

和下面的nginx设置同时允许开启了跨域功能 


配置示例:

        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,access-control-allow-origin,Authorization';

  

Access to XMLHttpRequest at 'https://manhua.wjoyxt.com/upload' from origin 'http://10.35.33.66:8083' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'http://10.35.33.66:8083, *', but only one is allowed.

程序内部如果已开启允许跨域,那么Nginx再次开启允许跨域的话,就会出现以上错误提示,所以两者只能only one开启

 

识别服务器允许的请求方法:

要找出服务器支持的请求方法,可以使用 curl 并发出 OPTIONS 请求:

curl -X OPTIONS http://example.org -i

该响应包含一个包含允许的方法的Allow头文件:

HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800Date: Thu, 13 Oct 2016 11:45:00 GMT
Expires: Thu, 20 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)x-ec-custom-error: 1Content-Length: 0

跨域是前端开发中经常会遇到的问题,前端调用后台服务时,通常会遇到 No 'Access-Control-Allow-Origin' header is present on the requested resource的错误,这是因为浏览器的同源策略拒绝了我们的请求。
所谓同源是指,域名,协议,端口相同,浏览器执行一个脚本时同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
 
跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。
注意:跨域限制访问,其实是浏览器的限制
 
# vim nginx.conf
http {
  ###start###
  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Headers X-Requested-With;
  add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
  ###end ###
}

 add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Access-Control-Allow-Origin,Authorization';

 

 

posted on 2019-02-20 14:53  星辰大海ゞ  阅读(7906)  评论(0编辑  收藏  举报