跨域问题及解决方案
同源策略
什么是同源策略?
同源策略是浏览器的一个安全功能,不同源的的js脚本在没有明确授权的情况下,不能读写对方的资源。
即: a.com下的js文件通过ajax访问b.com下的文件或数据时就会报错。
什么是 —— 源
“源” 即使资源的来源。在浏览器看来:协议、域名和端口号均相同则属于同源。
跨域问题
什么是跨域
受到浏览器的同源策略影响,不同源的脚本不能操作其他源下面的文件和数据。但在某些场合,我们的程序必需要实现操作不同源下面的对象,这就是跨域。
跨域的解决方案
关于跨域的解决方案有很多,在这里不多展开。主要例举如下两种方案:
转 “不同源” 为 “同源”
既然浏览器的同源策略限制了我们访问其他源下的对象,那么我们可以转变思路,让两个不同源的js处于同一个源下面。而我们正好可以通过nginx的反向代理实现这样一种转换。
配置文件:/home/hsiar/hsiar-green.el7/conf/nginx.conf
1 | server { |
如上所示,hsiar启动了一个服务,在8088端口上进行监听。当匹配到 ‘/frame’ 开头的请求时,将其代理转发到 http://127.0.0.1:9911
上的服务进行处理。
这样,我们访问http://127.0.0.1:8088/frame
和访问http://127.0.0.1:9911/frame
一样了,从而实现了化 “不同源” 为 “同源”。
明确允许其他源访问当前源的对象
前面提到,在没有明确授权的情况下不能访问其他源的对象。所以,只需要对需要访问当前源的其他源进行授权,就可以使对方名正言顺的访问当前源的对象。hsiar 可以通过配置的方式,进行这种授权。
配置文件:/home/hsiar/hsiar-green.el7/conf/cross-domain-map.conf
1 | map $http_origin $corsHost { |
只需参照如上配置进行设置,即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 问鼎个人站!