【Nginx】跨域处理

问题由来

浏览器拒绝执行其它域名下的ajax运作

【Nginx】跨域处理
【Nginx】跨域处理

如上图:chrome首次使用域名static.enjoy.com加载html页面——->然后在页面内由ajax方式向域名 www.enjoy.com发起请求。
此时问题出现:chrome拒绝执行ajax请求得到的返回值。

此问题常见解决方案:

最常用的是,jsonp。此方案需要前后端共同协作来解决。

cors跨域,此方式非常优雅,是w3c组织制定的解决方案。为目前主流方案。方案流程如下图:

【Nginx】跨域处理

案例

  1. 当chrome发现ajax请求的网址,与当前主域名不一致(跨域)时,会在请求header中追加值页面主域名值,即:origin = http://static.enjoy.com
    【Nginx】跨域处理
  2. nginx在接收到ajax请求时,会查看origin值,即请求我的网址是谁?
    此处使用正则来校验,即:只要是enjoy.com下的网址,都允许访问我
    返回信息时,nginx追加header值:access-control-allow-origin = static.enjoy.com(回答浏览器,static域名网址可以访问我)
    【Nginx】跨域处理
  3. chrome收到ajax返回值后,查看返回的header中access-control-allow-origin的值,发现其中的值是static.enjoy.com,正是当前的页面主域名。这是允许访问,于是执行ajax返回值内容。(ps:若此处access-control-allow-origin不存在,或者值不是static域名,chrome就拒绝执行返回值)
    【Nginx】跨域处理