【Nginx】跨域处理
问题由来
浏览器拒绝执行其它域名下的ajax运作
如上图:chrome首次使用域名static.enjoy.com加载html页面——->然后在页面内由ajax方式向域名 www.enjoy.com发起请求。
此时问题出现:chrome拒绝执行ajax请求得到的返回值。
此问题常见解决方案:
最常用的是,jsonp。此方案需要前后端共同协作来解决。
cors跨域,此方式非常优雅,是w3c组织制定的解决方案。为目前主流方案。方案流程如下图:
案例
- 当chrome发现ajax请求的网址,与当前主域名不一致(跨域)时,会在请求header中追加值页面主域名值,即:origin = http://static.enjoy.com
- nginx在接收到ajax请求时,会查看origin值,即请求我的网址是谁?
此处使用正则来校验,即:只要是enjoy.com下的网址,都允许访问我
返回信息时,nginx追加header值:access-control-allow-origin = static.enjoy.com(回答浏览器,static域名网址可以访问我) - chrome收到ajax返回值后,查看返回的header中access-control-allow-origin的值,发现其中的值是static.enjoy.com,正是当前的页面主域名。这是允许访问,于是执行ajax返回值内容。(ps:若此处access-control-allow-origin不存在,或者值不是static域名,chrome就拒绝执行返回值)