跨域解决方案之nginx

分享人:胡玉周

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

什么是跨域以及产生原因

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。

什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

同源策略限制以下几种行为:

1.) Cookie、LocalStorage 和 IndexDB 无法读取
2.) DOM 和 Js对象无法获得
3.) AJAX 请求不能发送

常见跨域场景

URL                                      说明                    是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js         同一域名,不同文件或路径           允许
http://www.domain.com/lab/c.js

http://www.domain.com:8000/a.js
http://www.domain.com/b.js         同一域名,不同端口                不允许

http://www.domain.com/a.js
https://www.domain.com/b.js        同一域名,不同协议                不允许

http://www.domain.com/a.js
http://192.168.4.12/b.js           域名和域名对应相同ip              不允许

http://www.domain.com/a.js
http://x.domain.com/b.js           主域相同,子域不同                不允许
http://domain.com/c.js

http://www.domain1.com/a.js
http://www.domain2.com/b.js        不同域名                         不允许

2.知识剖析

跨域解决方案

1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域

3.常见问题

如何跨域

4.解决方案

nginx反向代理解决跨域

5.编码实战

首先找到nginx.con

自定义本地的url请求规则 ,如 http://www.720ui.com/blog 则对应要nginx服务转发到 http://blog.720ui.com 。
配置 nginx.conf 文件,将本地带有特定前缀的URL接口请求转发到要跨域的真实物理服务器上。

        
            server
{
  listen 80;
  server_name www.720ui.com;

  location ^~ /blog/ {
      proxy_pass http://blog.720ui.com/;
  }
}
        
    

6.扩展思考

还有什么解决方案

jsonp,利用了src属性可以跨域的特性

7.参考文献

参考一: 跨域问题解决方案(Nginx)

参考二: 用nginx的反向代理机制解决前端跨域问题

8.更多讨论

感谢大家观看

BY : 伊文秋|胡玉周