JavaScript跨域总结与解决办法 什么是跨域
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下:首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。特别注意两点:第一,如果是协议和端口造成的跨域问题“前台”是无能为力的,第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。接下来简单地总结一下在“前台”一般处理跨域的办法,后台proxy这种方案牵涉到后台配置,这里就不阐述了,有兴趣的可以看看yahoo的这篇文章:《JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls》1、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.htmldocument.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.htmlalert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);};script.a.com上的b.htmldocument.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;}};3、利用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域下的代理iframevar 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);当然这样做也存在很多缺点,诸如数据直接暴露在了url中,数据容量和类型都有限等……4、window.name实现的跨域数据传输文章较长列在此处不便于阅读,详细请看 window.name实现的跨域数据传输。5、使用HTML5 postMessageHTML5中最酷的新功能之一就是 跨文档消息传输Cross Document Messaging。下一代浏览器都将支持这个功能:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 。 Facebook已经使用了这个功能,用postMessage支持基于web的实时消息传递。otherWindow.postMessage(message, targetOrigin);otherWindow: 对接收信息页面的window的引用。可以是页面中iframe的contentWindow属性;window.open的返回值;通过name或下标从window.frames取到的值。message: 所要发送的数据,string类型。targetOrigin: 用于限制otherWindow,“*”表示不作限制a.com/index.html中的代码:b.com/index.html中的代码:参考文章:《精通HTML5编程》第五章——跨文档消息机制、https://developer.mozilla.org/en/dom/window.postmessage6、利用flash这是从YUI3的IO组件中看到的办法,具体可见http://developer.yahoo.com/yui/3/io/。可以看在Adobe Developer Connection看到更多的跨域代理文件规范:ross-Domain Policy File Specifications、HTTP Headers Blacklist。
网页链接可以看看这个

跨域访问服务端,如果数据量较大,无response问题遇到过吗
最近要把web端已有的应用扩展到移动端h5轻应用上,遇到了跨域访问一个诡异的问题。在服务端设置好Access-Control-Allow-Origin:* ;Access-Control-Allow-Credentials: "true" 后,两个系统做了cas,然后开发环境一切ok。等到项目准备上线时,打包进weblogic,居然发现访问失效。具体表现是当请求的结果超出一定数据量以后(因为可以指定每页条数,所以可以一点点的加返回数据量,当到了一个临界值以后,突然出现问题,比如30条的时候没事,31条突然就没数据了),从浏览器观察返回的response为空。在weblogic开了debug模式,发现后端一切正常没有任何错误,也确实查了数据库也确实返回了。后来为了验证这个问题,把同一个包又放到tomcat上跑,发现能返回数据量的临界值更小了,同一个包放在本地jetty上就没这个问题。所以我怀疑是不是各个应用服务器在处理跨域返回数据量时有一个默认值,可以配置的?我找了文档却没发现有这个设置。百思不得其解,卡了我好几个周了,求大神解惑!!! 今天我又做了几个实验,这个限额大约是20k的样子!!

jsonp跨域原理
jsonp跨域原理用script标签的开放策略,可以实现跨域请求数据。当正常地请求一个JSON数据的时候,服务端返回的是一串JSON类型的数据,而使用JSONP模式来请求数据的时候,服务端返回的是一段可执行的JavaScript代码。JSONP在开放API中可以起到非常重要的作用,开放API是运用在开发者自己的应用上,而许多应用往往是在开发者的服务器上,而不是在新浪微博的服务器上。因此跨域请求数据成为开发者们所需要解决的一大问题,广大开放平台应该实现对JSONP的支持,虽然某些API里没有说明,但实际上是可以使用JSONP方式调用的。扩展资料在客户端调用提供JSONP支持的URL Service,获取JSONP格式数据。比如客户想访问http://www.yiwuku.com/myService.aspx?jsonp=callbackFunction假设客户期望返回JSON数据:["customername1","customername2"]那么真正返回到客户端的Script Tags:callbackFunction([“customername1","customername2"])可能的调用方式:

跨域怎么解决
1)访问原来无法访问的资源,如google (2) 可以做缓存,加速访问资源(3)对客户端访问授权,上网进行认证(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息 客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。 (1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击 大型网站,通常将反向代理作为公网访问地址,Web服务

军事高技术的发展对我国提出了哪些新的挑战
军事高技术的发展对我国提出了的挑战:一、战争时空特征发生变化。军事科技推动战争进入新形态,战争时空观随之出现革命性变化。作战空间将突破地球三维空间的约束,不断向太空、网络和电磁空间、深海和极地等“全球公域”拓展。多维战场空间融为一体,虚拟空间博弈成为重点,人们开始在现实空间与虚拟空间之间进行交互式军事行动。战事持续过程缩短,“瞬间交战”成为可能,可以真正做到“发现即摧毁”,在高超声速平台、激光武器、各类无人系统等尖端领域的较量,毫秒甚至纳秒间的差迟将造就不一样的战局,战场时空转换的天平进一步向时间倾斜。二、制胜技术手段不断拓展。军事技术形态将加快向智能化、网络化、精确化方向发展,武器装备微型化、隐身化、无人化趋势凸显,毁伤机理从“大规模杀伤”转向“精确控制”。智慧化战场环境、智能化武器装备将彻底改变作战手段,战场主角是程序炸弹、无人机、激光、空天飞机等“被信息化”的武器。战争呈现出非接触、非线性、非对称和非正规的特征,中小型甚至小微装备以“群”的形式出现将成为重要运用形式。未来战争追求有限目的,不再追求完胜或全胜,可能会更加强调定点毁伤、心理震慑相结合的有效控制。三、传统战争样式发生变革。科技进步使战争形式多样化成为常态,战略、战役与战术行动趋于融合。多元作战力量和作战行动分布于战场全维空间,战争无前方后方之分、军用民用之别。网络、电子、太空、无人等领域的关键技术突破,可能推出全球一体化联合作战、全球快速打击、网络空间战、混合战争等新型作战样式。攻防一体、跨域协同、并行作战成为主要作战方式,逐级搏杀、累积制胜的传统大规模战争模式走向终结;传统战争不会消失,而是进一步发展并继续发挥重要作用。拓展资料:军事高技术的应用:一、新一代军用信息技术将大幅提升战场信息处理能力。信息技术是信息化战争制胜的主导技术,也是信息化武器装备建设的主要支撑。近年来,新一代信息网络技术蓬勃发展,移动互联网、云计算、大数据、量子信息等技术在军事领域得到越来越广泛的应用,这将使军队的信息获取、数据传输、情报支援、信息服务等能力得到大幅提升。二、新型主战装备和高自主无人平台技术将使未来战争趋向隐形化、无人化。信息化战场上,主战装备依然是作战能力的核心。为了在激烈的军事竞争中占据主动权,主要军事强国正在着力推进新一代主战装备的研制。一是全面启动第六代战斗机方案论证。第六代战斗机将具备更好的隐身能力、更高的网电对抗能力、更强的信息处理能力、更远的作战半径,代表了新型主战装备的发展方向。三、高效毁伤与定向能技术将使火力打击方式发生重大变革。近几年的几场局部战争表明,精确打击和高效毁伤已成为军队作战的核心能力,“发现即摧毁”成为火力打击的新常态。目前,高效毁伤技术正向高效能、低附带毁伤和智能可控方向发展。参考资料来源:人民网—世界军事科技发展趋势及重要影响
论军事高科技的发展对国防建设的影响 前言:11月25日,我国自行研制的歼-15舰载机顺利在中国第一艘航空母舰“辽宁舰”上进行了起降飞行训练,引起世界广泛关注,这是我国在世界尖端军事高技术上的又一次巨大突破,对增强我国军事实力,维护我国国家主权有重大意义。如今,高新技术已经成为社会发展的推动力,经济繁荣的生产力,政治上的影响力,军事上的战斗力,综合国力的决定因素。因此,重视军事高科技发展对增强我国综合国力,维护国家安全,创造稳定环境具有重大意义。摘要:十八大报告《加快推进国防和军队现代化建设》中重点强调:提高国防科技的自主创新能力,深入推进军队组织形态现代化,构建中国特色现代军事力量体系,是打赢现代化战争的需求。本文针对性地探讨了军事高技术的发展原因,以分析军事高技术对战争以及国家发展的影响为主要内容,并提出我国发展军事高技术的建议。军事高技术,指的是建立在现代综合科学研究的基础上,处于当代科学技术前沿的,对武器装备发展与作战能力提高起巨大推动作用的新技术群。它是建立在当代学科交叉融合的基础上,综合利用各学科的最新科技成果,紧密结合军事综合实力,全面构建以及不断变革与创新的结果。可以说,谁在军事高技术领域处于领先地位,谁就能于军事中掌握更多的主动;谁在军事高技术领域落后,谁就会被动挨打。关键词:军事高技术武器装备军事人才战争 国防一、军事高技术发展的背景及现状1. 第三次科技革命的迅速发展,不但对整个科技的进步与经济的发展产生了巨大的影响,也导致了战争军事技术日益走向了技术化,信息化。以各种高技术为支撑,以信息技术的迅速发展为导向,未来的战争形态将发生了根本性的转变,因此军队信息化的程度已成为决定了军队的战斗力以及确立军事领域的战略地位和维护国家安全的重要因素。2. 二战后尤其是最近二三十年来的历史证明,军事战争的需要直接导致一系列高技术成果的问世,并且大多数高技术成果首先应用于军事以后再逐渐向民用领域扩展。以核武器技术、导弹技术、计算机技术、微电子技术、航天技术为代表的军事高技术群体在20世纪60年代以后异军突起,并以此带来了战后世界科技发展的黄金时代。到了20世纪70年代,在计算机技术、航天技术发展的影响下,以信息产业为代表的高技术产业如雨后春笋般涌现并迅速成长壮大。以军事高技术为导向,国防科技和军事工业开始全面走向高技术化,精确制导武器、军用卫星、电子战装备和CISR系统与GIG等崭新的高技术武器装备已大量研制成功并登上战争舞台。高技术就这样广泛地进入了军事技术发展的各个领域。20世纪如年代初的海湾战争,大量高技术武器装备在战场上的广泛应用及其所取得的惊人的作战效果,更使各国深刻认识到,未来战争将是高技术战争,如果不掌握高技术手段,将难以在高技术战争中立于不败之地。二、军事高技术对国防建设以及现代战争的影响(一) 军事高技术的发展与突破有助于提高武器装备的质量,高技术武器装备大量使用将明显地改变现代战场与作战行动,强制性地引起作战方式的变革1) 用高技术武器作战,其向空域扩大化,战场大纵深化、高度立体化发展。由于兵力兵器的快速作战能力提高,使其在夜间和不良气象条件下受影响程度减小,使作战行动向高速度、全天候、全时域发展。 2) 在阿富汗战争中,美军共投掷各类弹药2.2万余枚,其中精确制导弹药1.3万多枚,使用比例由海湾战争的9%、科索沃战争的35%大幅上升到此次战争的60%,并创造了一次打击任务在20分钟内投掷100枚联合直接攻击弹药的历史纪录。高新技术战争已经成为战争的一种发展趋势。 (二) 军事高技术的发展使作战指挥体系"扁平网络化"传统的自上而下的高度集中的"树状"指挥体系已经过时,取而代之的将是扁平型"网状"指挥体系。C4ISR系统将成为一种典型的指挥模式。这是一种人-机结合的指挥自动化系统,它通过部署在地面、空中和空间的各种探测器或传感器自动搜集各种信息,并通过计算机实时处理战场信息,提供有关数据,帮助进行决策,拟定作战方案,下达作战命令。使军队指挥手段自动化、信息获取实时化和信息与作战管理的一体化。(三) 军事高技术的广泛应用必然引起军队建设的变革,有助于培养大批高素质的军事人才1. 军事高技术的广泛应用使军队规模缩小,军队结构将不断优化,数字化部队将成为发展趋势,军队人员构成和素质将大幅度改善。2. 军事高技术具有高智力、高创新性,是不同学科众多科技人员指挥的结晶。而军事高技术的应用靠军工人员去实践,兵器的高战技性能靠有素质的军人去发挥,还要有甘当公仆及具有高校企业管理才能的管理人员。因此,军事高技术的广泛应用能够促进以一大批高素质人才的出现。(四) 军事高技术的发展利于创新国防战略战术兵法战术的应用,是中华文明的一部分。但脱离军事高技术的应用,也只是虚有其表。鸦片战争时期,清王朝竟用三国时期曹操诸葛亮的虚实兵法与拥有先进装备的英国人作战,结果惨败求和。历史事实表明,战略战术的创新要与紧随军事高技术的发展步伐。只有科学得当的战略战术,才能指导现代军事斗争的实践。成功的军事斗争实践经验又可以反过来促进现代军事战术的完善与创新。三、我国应如何面对军事高技术的影响作为世界上最大的发展中的社会主义国家,在应对世界军事高科技对我国国防建设的带来的机遇和挑战和解决进行新时期军事变革中的问题上,既要取的自身的发展,又要放眼世界借鉴各国之长。我军进行现代化建设必须跟上世界军事变革和潮流,积极借鉴各国军队特别是发达国家军队现代化建设的有益经验,有选择的引进先进的技术装备和管理方法。努力跟上军事变革和发展潮流。要与时俱进,开阔创新。学习借鉴时一定要坚持实事求是的科学态度,采取分析批判的科学方法,从我国实际出发而取其精华。要把创新作为学习借鉴的目的,独立自主,自力更生是我们的根本立足点,并以此大力加强人才培养,努力构建我军创新体系。努力培养和造就大批高质量人才。十八大针对我国特色军事变革的过程中指出:要加快推进国防和军队现代化的战略任务,坚持推动国防和军队建设科学发展的主题,积极稳妥地推动中国特色军事变革。 总结:当今世界格局呈现一极超强,多极化趋势增强的态势。因而当今世界并非风平浪静,每一个发展中国家例如中国,必须依靠军事高技术建设强大的国防综合实力,以在快速发展变化且动荡不安的大环境中进行有中国特色的经济建设,实现又快又好发展的目的。因此,发展军事高技术不仅对我国国防建设,国家主权和安全的维护具有重大意义,还利于对我国经济发展,政局稳定创造良好环境。

本文由 在线网速测试 整理编辑,转载请注明出处。