[跨域]关于新版Nginx配置跨域的问题

这周末,在姐外包,然后外包么,得搭建测试服务器,给业务用。

然后咱们穷的连测试服务器都没有,于是我就贡献了我自己的服务器。顺便配置部署了一下。

但是部署业务的时候,遇到了一个问题,就是跨域。

我以为么,跨域这玩意不是很简单吗?直接配置了如下的代码到nginx 的server 字段里

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Request-Method' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' '*';

我以为加完就没事了,结果发现还是不行。然后,谷歌告诉我,这个还得在后面加上always 因为nginx不会时时刻刻加上这个跨域请求头的,得加上always才会时刻加上跨域请求头。
于是代码进化为如下。

add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Request-Method' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Headers' '*' always;

但是悲催的事情来了,还是不行,发现options这个请求还是失败的。MMP的!跨域这玩意神烦。跨域问题,谷歌的浏览器是首先会发送一个options的请求,然后服务端返回给这个options 204 这样浏览器才会进行下一步请求的。
既然我都always了,那么问题肯定出现在返回的http状态吗上。
于是,我又加上了一段

if ($request_method = 'OPTIONS') {
    return 204;
}

这一段能让nginx保证在请求options时一定返回204的状态码。
终于经过了一番的挣扎,解决了这个跨域问题。

浏览器为了安全问题创建了跨域,但是我们还是有各种需求来移除掉这个跨域的限制的。其实这个跨域就没必要了。限制来限制去,不还得去掉。。好像脱裤子放屁。。。

(PS:我就是嫌麻烦实际跨域,不应该返回*而应该仅仅限制信任的域的请求能够访问的。)

未经允许不得转载:RffanLAB|Rffan实验室 » [跨域]关于新版Nginx配置跨域的问题

赞 (1) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏