作为程序员一定要保持良好的睡眠,才能好编程

同源策略、跨域解决方案

发布时间:2018-09-10

为什么会有这样的问题?


什么是同源?


什么是跨域? 

当访问本站采取ajax请求资源 不属于同源策略 ,就是跨域。


怎么跨域?

web服务器直接设置

或程序header头中去写


什么是简单请求?



什么是非简单请求?


为什么会发 options请求?



先来针对上面的问题,来看看


先来说说什么是源?


源:协议、域名、端口一致 


地址中协议、域名和端口一致 称之为同源。



什么是同源策略?

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。

所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。


解决方案:跨域


PHP处理Ajax请求与Ajax跨域


不受同源策略限制的:

1、页面中的链接,重定向以及表单提交是不会受到同源策略限制的。

2、跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等。




采用jsonp跨域也存在问题:

1. 使用这种方法,只要是个网站都可以拿到b.com里的数据,存在安全性问题。需要网站双方商议基础token的身份验证,这里不详述。

2. 只能是GET,不能POST。

3. 可能被注入恶意代码,篡改页面内容,可以采用字符串过滤来规避此问题。


CORS 现在主流   


CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

刚才的例子中,在b.com里面添加响应头声明允许a.com的访问,代码:

Access-Control-Allow-Origin: http://a.com

然后a.com就可以用ajax获取b.com里的数据了。

注意:此方法IE8以下完全不支持,IE8-10部分支持。详见caniuse-CORS