这周末,在姐外包,然后外包么,得搭建测试服务器,给业务用。
然后咱们穷的连测试服务器都没有,于是我就贡献了我自己的服务器。顺便配置部署了一下。
但是部署业务的时候,遇到了一个问题,就是跨域。
我以为么,跨域这玩意不是很简单吗?直接配置了如下的代码到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配置跨域的问题