由于浏览器的同源策略,限制了非同源资源的交互.这是个安全机制.
同源:
协议: http,https
端口: port
主机: host
浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询.【前端安全】
JSONP
在HTML标签里,一些标签比如script、img这样的获取资源的标签是没有跨域限制的,可以利用这一点实现get请求跨域,因为标签加载资源就是GET
1 |
|
封装一下
1 | /** |
CORS
CORS是一个W3C标准,全称是”跨域资源共享”.实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
主要实现是在头信息之中,添加一个Origin字段
1 | Origin: http://api.bob.com 指定源 |
代理
同源策略是浏览器的安全策略,不是HTTP协议的一部分。服务器端调用HTTP接口只是使用HTTP协议,不会执行JS脚本,不需要同源策略,也就不存在跨越问题。
具体实现可以用nginx反向代理接口跨域
在VUE中可以直接配置webpack.config.js(vue.config.js)文件实现代理,其原理同上,利用node + webpack + webpack-dev-server代理接口跨域
1 | module.exports = { |
代理: 也称正向代理,是指一个位于客户端和目标服务器(target server)之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标(目标服务器),然后代理向目标服务器转交请求并将获得的内容返回给客户端。(例: 科学上网,通过香港代理服务器访问外网)
反向代理: 是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。(例: 外网访问内网,反向代理获取数据)
反向代理和正向代理区别
关于跨域的方式还有很多(没啥用):
1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域
不要再问我跨域的问题了
跨域资源共享 CORS 详解
前端常见跨域解决方案(全)