热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ajax之口试必问跨域题目

ajax之口试必问跨域题目,假如你晓得jsonp就弱爆了,往深处轻微问那末一丢丢,你就会被虐的万劫不复…个人总结ajax:1、什么是跨域2、document.domain+ifra

ajax之口试必问跨域题目,假如你晓得jsonp就弱爆了,往深处轻微问那末一丢丢,你就会被虐的万劫不复…个人总结ajax:

1、什么是跨域
2、document.domain+iframe的设置
3、动态建立script
4、应用iframe和location.hash
5、window.name完成的跨域数据传输
6、运用HTML5 postMessage
7、应用flash

1、跨域是有浏览器的同源战略引发的(一定要记着通同源战略引发的)

同源战略:同源战略(Same origin policy)是一种商定,它是浏览器最中心也最基本的平安功用,假如缺少了同源战略,则浏览器的一般功用可以都邑受到影响。可以说Web是构建在同源战略基本之上的,浏览器只是针对同源战略的一种完成。所谓同源是指,域名,协定,端口雷同。差别源的客户端剧本(Javascript、ActionScript)在没明白受权的状况下,不能读写对方的资本。
看看下面的表格,剖析下主域名和子域名,跨域和IP是差别的,详见表格吧~

《ajax之口试必问跨域题目》

2、document.domain+iframe的设置

关于主域雷同而子域差别的例子,可以经由过程设置document.domain的要领来处置惩罚。细致的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html两个文件平分别加上document.domain = ‘a.com’;然后经由过程a.html文件中建立一个iframe,去掌握iframe的contentDocument,如许两个js文件之间就可以“交互”了。固然这类要领只能处置惩罚主域雷同而二级域名差别的状况,假如你异想天开的把script.a.com的domian设为alibaba.com那显然是会报错地!代码以下:
www.a.com上的a.html

document.domain = 'a.com';
var ifr = document.createElement('iframe');
ifr.src = 'http://script.a.com/b.html';
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.Onload= function(){
var doc = ifr.contentDocument || ifr.contentWindow.document;
// 在这里支配b.html
alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
};

script.a.com上的b.html

document.domain = 'a.com';

这类体式格局适用于{www.kuqin.com, kuqin.com, script.kuqin.com, css.kuqin.com}中的任何页面互相通讯。

备注:某一页面的domain默许即是window.location.hostname。主域名是不带www的域名,比方a.com,主域名前面带前缀的一般都为二级域名或多级域名,比方www.a.com实际上是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。

题目:
1、平安性,当一个站点(b.a.com)被进击后,另一个站点(c.a.com)会引发平安漏洞。
2、假如一个页面中引入多个iframe,要想可以操纵一切iframe,必需都得设置雷同domain。

2、动态建立script

虽然浏览器默许制止了跨域接见,但并不制止在页面中援用其他域的JS文件,并可以自在实行引入的JS文件中的function(包含操纵COOKIE、Dom等等)。依据这一点,可以方便地经由过程建立script节点的要领来完成完整跨域的通讯。细致的做法可以参考YUI的Get Utility

这里推断script节点加载终了照样蛮有意思的:ie只能经由过程script的readystatechange属性,别的浏览器是script的load事宜。以下是部份推断script加载终了的要领。

js.Onload= js.Onreadystatechange= function() {
if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {
// callback在此处实行
js.Onload= js.Onreadystatechange= null;
}
};

应用iframe和location.hash

这个要领比较绕,然则可以处置惩罚完整跨域状况下的脚步置换题目。道理是应用location.hash来举行传值。在url: http://a.com#helloword中的‘#helloworld’就是location.hash,转变hash并不会致使页面革新,所以可以应用hash值来举行数据通报,固然数据容量是有限的。假定域名a.com下的文件cs1.html要和cnblogs.com域名下的cs2.html通报信息,cs1.html起首建立自动建立一个隐蔽的iframe,iframe的src指向cnblogs.com域名下的cs2.html页面,这时候的hash值可以做参数通报用。cs2.html相应要求后再将经由过程修正cs1.html的hash值来通报数据(由于两个页面不在同一个域下IE、Chrome不允许修正parent.location.hash的值,所以要借助于a.com域名下的一个代办iframe;Firefox可以修正)。同时在cs1.html上加一个定时器,隔一段时间来推断location.hash的值有无变化,一点有变化则猎取猎取hash值。代码以下:

先是a.com下的文件cs1.html文件:

function startRequest(){
var ifr = document.createElement('iframe');
ifr.style.display = 'none';
ifr.src = 'http://www.cnblogs.com/lab/cscript/cs2.html#paramdo';
document.body.appendChild(ifr);
}
function checkHash() {
try {
var data = location.hash ? location.hash.substring(1) : '';
if (console.log) {
console.log('Now the data is '+data);
}
} catch(e) {};
}
setInterval(checkHash, 2000);

cnblogs.com域名下的cs2.html:

//模仿一个简朴的参数处置惩罚操纵
switch(location.hash){
case '#paramdo':
callBack();
break;
case '#paramset':
//do something……
break;
}
function callBack(){
try {
parent.location.hash = 'somedata';
} catch (e) {
// ie、chrome的平安机制没法修正parent.location.hash,
// 所以要应用一个中心的cnblogs域下的代办iframe
var ifrproxy = document.createElement('iframe');
ifrproxy.style.display = 'none';
ifrproxy.src = 'http://a.com/test/cscript/cs3.html#somedata'; // 注重该文件在"a.com"域下
document.body.appendChild(ifrproxy);
}
}

a.com下的域名cs3.html

//由于parent.parent和本身属于同一个域,所以可以转变其location.hash的值
parent.parent.location.hash = self.location.hash.substring(1);

4、window.name完成的跨域数据传输

5、运用HTML5 postMessage

6、应用flash

细致的引见请检察http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html#m3此链接


推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。脚本数据保存如果您已初始化dataProcessor,则用户或以编程方式所做的任何更改都将自动 ... [详细]
author-avatar
Steven
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有