跨域访问

简介

浏览器出于安全和隐私的原因,对于XMLHttpRequest请求,禁止不同域名,不同端口,不同协议间的脚本相互影响,跨域脚本无效。如上图(摘自参考1)用户在浏览器浏览网站,如果javascript脚本请求了yahoo的接口或者文件,会报类似下图这样的错误。

同源策略:相同域名,相同端口,协议相同。三者有一个不满足,对于XMLHttpRequest来说,就存在跨域问题。

剖析

参考4,深度好文。慕课也有一篇翻译的,建议对比着看。

解决方式

1.使用web代理的方式处理(详情见参考1)。这也是通用处理方式。(可以配置NGINX服务、或者代码层次上请求)

大致的做法就是在web后端向第三方网站发送http请求,然后“包装”一下,供前端调用。

2.Cross-Origin Resource Sharing(CORS)

通过添加一些特殊的请求头、响应头,使web进行跨域通信

详情可以参考5

Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 
Access-Control-Expose-Headers: FooBar

3.jsonp(JSON with Padding)

原理:一种非官方跨域数据交互协议,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,凡是拥有”src”这个属性的标签都拥有跨域的能力,比如

你可能感兴趣的:(cors)