同源策略的介绍| 学习笔记

简介: 快速学习同源策略的介绍。

开发者学堂课程【Ajax 前端开发入门与实战同源策略的介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/595/detail/8540


同源策略的介绍

 

一、同源策略的概念

同源策略是浏览器的安全机制。

跨域的概念:

跨域,是源于一个叫做同源策略。

同源策略的概念:

同源策略是浏览器上为安全性考虑实施的非常重要的安全机制。Ajax 默认是能获取到同源的数据,对于非同源的数据,ajax 默认是获取不到。

目的:同源策略是为了保证用户信息的安全,防止恶意的网站窃取数据。

例子:比如有一个页面,它的地址为

http://www.example.com/dir/page.html,这个网址,在这个网址中,要去获取服务器的数据,获取数据的地址如下所示,在下面的地址中,有的是同源,有的是非同源。

image.png

同源就是协议、端口、域名三者都完全一样,如果使用 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 =“邮箱不可以使用";

}

出现如下情况:

image.png

非同源情况

1.如果交互页面的协议、主机名和非 Internet Explorer 端口号的浏览器匹配,则无需进一步检查即可访问

2. 任何页面都可以将 document.domain 参数设置为其当前主机名的右侧完全限定的片段,比如foo.bar.example. com 可以将其设置为 example.com,也可以为bar.example.com。

如果两个页面显式且相互将各自的 document.domain 参数设置为相同的值,并且满足了其余的同源检查,则允许访问

相关文章
|
缓存 NoSQL 关系型数据库
Redis缓存与Mysql数据库的一致性问题解决
Redis缓存与Mysql数据库的一致性问题解决
292 0
|
Cloud Native Linux Docker
云原生之使用Docker部署ftp服务器
云原生之使用Docker部署ftp服务器
1008 0
|
人工智能 监控 安全
政府行业应用解决方案 | 应急行业
本文介绍了政府行业应用解决方案 | 应急行业的方案概述,方案价值及优势以及最佳实践。
政府行业应用解决方案 | 应急行业
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
242 1
|
存储 监控 Linux
在Linux中,可以使用哪个命令查看系统的历史负载?
在Linux中,可以使用哪个命令查看系统的历史负载?
|
8月前
|
SQL Oracle 关系型数据库
迁移方案详解 | 使用YMP从异构数据库迁移到YashanDB
迁移方案详解 | 使用YMP从异构数据库迁移到YashanDB
|
8月前
|
运维 安全 开发工具
GitHub 热门开源运维工具 Websoft9:如何实现服务器管理效率翻倍?
Websoft9 提供 200+ 开源应用一键部署,支持容器化隔离、GitOps 自动化和企业级安全防护,助力服务器管理效率提升 80%。
280 1
|
12月前
|
网络协议 API 网络安全
发送TCP数据免费API接口教程
此API用于向指定主机发送TCP数据,支持POST/GET请求,需提供用户ID、KEY、接收IP、端口及数据内容。返回状态码和信息提示,示例如下:{"code":200,"msg":"发送成功!"}。详情见:https://www.apihz.cn/api/datacstcp.html
190 11
|
存储 前端开发 数据可视化
集团数字化经营分析平台(帆软版)
集团数字化经营分析平台(帆软版)
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
232 4