前后端分离,跨域,nginx中忽略OPTIONS请求配置跨域

现在很多项目都是喜欢前后端分离,网上看了很多感觉心累,写的七七八八,多次尝试后把自己用的展示如下:
          if ($http_origin ~* "^http://a.domain.com$") {
                  set $cors_origin $http_origin;
          }
          if ($http_origin ~* "^http://b.domain.com$") {
                  set $cors_origin $http_origin;
          }
          if ($request_method = 'OPTIONS') {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers X-Requested-With,aheader, bheader, cheader;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Max-Age 86400;
          return 204;

        }
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers X-Requested-With,aheader, bheader, cheader;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Max-Age 86400;

注意:

  • nginx 不支持循环if
  • add_header xxxxx xxxx 内容请放入location内,直接在service下放入if区域中会报错
  • b.domain.com a.domain.com 为你自己要开通跨域权限的域名
  • aheader, bheader, cheader 这些表示独立需要传递的header头
  • 网上 大部分只在 ($request_method = 'OPTIONS') 区域内配置了跨域,这可能会造成浏览器第二次正式请求后拿不到返回体(实测,也不知道什么原因),所以最后正常请求中也加入跨域信息
  • 具体add_header参数 自行百度
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,843评论 0 11
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,078评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,336评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 857评论 0 4
  • 几年前去过五台山,好像是许过愿,也不记得愿望实现了没,总有个需要还愿的念头。但也不知道愿望到底实现了没。连愿望都模...
    尚灵心阅读 730评论 3 6