开发者学堂课程【Ajax 前端开发入门与实战:同源策略的介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/595/detail/8540
同源策略的介绍
一、同源策略的概念
同源策略是浏览器的安全机制。
跨域的概念:
跨域,是源于一个叫做同源策略。
同源策略的概念:
同源策略是浏览器上为安全性考虑实施的非常重要的安全机制。Ajax 默认是能获取到同源的数据,对于非同源的数据,ajax 默认是获取不到。
目的:同源策略是为了保证用户信息的安全,防止恶意的网站窃取数据。
例子:比如有一个页面,它的地址为
http://www.example.com/dir/page.html,这个网址,在这个网址中,要去获取服务器的数据,获取数据的地址如下所示,在下面的地址中,有的是同源,有的是非同源。
同源就是协议、端口、域名三者都完全一样,如果使用 ajax, 来请求非同源路径下的数据,那么将会报错误
浏览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。两个不同的源之间若想要相互访问资源或者操作 DOM,那么会有⼀套基础的安全策略的制约,我们把这称为 同源策略。它的存在可以保护用户隐私信息,防止身份伪造等
例子:
1.前端界面的地址:前端界面地址需要进行服务器数据获取,比如校验用户名的唯一性,需要获取服务器的数据,而这个数据也需要传递地址。
2.服务器数据的地址
注意:前端界面地址和服务器数据的地址必须处在同源的情况下,ajax才可以正常使用。
示例代码:
email.onblur = function()
{
var emailValue = email.value;
var xhr = null;
if(window .XMLHttpRequest) {
xhr = new XMLHttpRequest();
}else {
xhr = new ActivexObject("Microsoft.XMLHTTP");
}
var param = "e=" + emailValue;
xhr.open("post","http://www.lisi.com/server/checkEmail.php",true);xhr.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
xhr.send(param);
xhr.oAreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status ==200){
var result = xhr.responseText;
var email_result = document.querySelector( "#email_result");
if(result ==) {
//邮箱可用
email_result.innerText =“邮箱可以使用";
}else {
email result.innerText =“邮箱不可以使用";
}
出现如下情况:
非同源情况
1.如果交互页面的协议、主机名和非 Internet Explorer 端口号的浏览器匹配,则无需进一步检查即可访问。
2. 任何页面都可以将 document.domain 参数设置为其当前主机名的右侧完全限定的片段,比如foo.bar.example. com 可以将其设置为 example.com,也可以为bar.example.com。
如果两个页面显式且相互将各自的 document.domain 参数设置为相同的值,并且满足了其余的同源检查,则允许访问。