iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript中怎么实现跨域共享
  • 585
分享到

JavaScript中怎么实现跨域共享

2024-04-02 19:04:59 585人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关javascript中怎么实现跨域共享,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。同源策略在客户端编程语言中,如javascr

这篇文章将为大家详细讲解有关javascript中怎么实现跨域共享,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

同源策略

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议(如Http),相同的端口(如80),相同的host(如www.example.org),那么我们就可以认为它们是相同的域。比如http://www.example.org/index.html和http://www.example.org/sub/index.html是同域,而http://www.example.org,https://www.example.org,http://www.example.org:8080,http://sub.example.org中的任何两个都将构成跨域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。

受到同源策略的影响,跨域资源共享就会受到制约。但是随着人们的实践和浏览器的进步,目前在跨域请求的技巧上,有很多宝贵经验的沉淀和积累。这里我把跨域资源共享分成两种,一种是单向的数据请求,还有一种是双向的消息通信。接下来我将罗列出常见的一些跨域方式,以下跨域实例的源代码可以从这里获得。

单向跨域

JSONP(jsONwithPadding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的javascript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行pageA中定义的函数,所需要的数据会以参数的形式传递给该函数。JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。

flash有自己的一套安全策略,服务器可以通过crossdomain.xml文件来声明能被哪些域的SWF文件访问,SWF也可以通过api来确定自身能被哪些域的SWF加载。当跨域访问资源时,例如从域www.a.com请求域www.b.com上的数据,我们可以借助flash来发送HTTP请求。首先,修改域www.b.com上的crossdomain.xml(一般存放在根目录,如果没有需要手动创建),把www.a.com加入到白名单。其次,通过FlashURLLoader发送HTTP请求,***,通过FlashAPI把响应结果传递给JavaScript。FlashURLLoader是一种很普遍的跨域解决方案,不过需要支持iOS的话,这个方案就无能为力了。

window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给window.name,iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。这个方式非常适合单向的数据请求,而且协议简单、安全。不会像JSONP那样不做限制地执行外部脚本。

在数据提供方没有提供对JSONP协议或者window.name协议的支持,也没有对其它域开放访问权限时,我们可以通过serverproxy的方式来抓取数据。例如当www.a.com域下的页面需要请求www.b.com下的资源文件asset.txt时,直接发送一个指向www.b.com/asset.txt的ajax请求肯定是会被浏览器阻止。这时,我们在www.a.com下配一个代理,然后把Ajax请求绑定到这个代理路径下,例如www.a.com/proxy/,然后这个代理发送HTTP请求访问www.b.com下的asset.txt,跨域的HTTP请求是在服务器端进行的,客户端并没有产生跨域的Ajax请求。这个跨域方式不需要和目标资源签订协议,带有侵略性,另外需要注意的是实践中应该对这个代理实施一定程度的保护,比如限制他人使用或者使用频率。

双向跨域

通过修改document的domain属性,我们可以在域和子域或者不同的子域之间通信。同域策略认为域和子域隶属于不同的域,比如www.a.com和sub.a.com是不同的域,这时,我们无法在www.a.com下的页面中调用sub.a.com中定义的JavaScript方法。但是当我们把它们document的domain属性都修改为a.com,浏览器就会认为它们处于同一个域下,那么我们就可以互相调用对方的method来通信了。

不同的域之间,JavaScript只能做很有限的访问和操作,其实我们利用这些有限的访问权限就可以达到跨域通信的目的了。FIM(FragmentIdentitierMessaging)就是在这个大前提下被发明的。父窗口可以对iframe进行URL读写,iframe也可以读写父窗口的URL,URL有一部分被称为frag,就是#号及其后面的字符,它一般用于浏览器锚点定位,Server端并不关心这部分,应该说HTTP请求过程中不会携带frag,所以这部分的修改不会产生HTTP请求,但是会产生浏览器历史记录。FIM的原理就是改变URL的frag部分来进行双向通信。每个window通过改变其他window的location来发送消息,并通过监听自己的URL的变化来接收消息。这个方式的通信会造成一些不必要的浏览器历史记录,而且有些浏览器不支持onhashchange事件,需要轮询来获知URL的改变,***,URL在浏览器下有长度限制,这个制约了每次传送的数据量。

页面上的双向通信也可以通过Flash来解决,FlashAPI中有LocalConnection这个类,该类允许两个SWF之间通过进程通信,这时SWF可以播放在独立的FlashPlayer或者AIR中,也可以嵌在HTML页面或者是pdf中。遵循这个通信原则,我们可以在不同域的HTML页面各自嵌套一个SWF来达到相互传递数据的目的了。SWF通过LocalConnection交换数据是很快的,但是每次的数据量有40kb的大小限制。用这种方式来跨域通信过于复杂,而且需要了2个SWF文件,实用性不强。

window.postMessage是HTML5定义的一个很新的方法,这个方法可以很方便地跨window通信。由于它是一个很新的方法,所以在很旧和比较旧的浏览器中都无法使用。

关于JavaScript中怎么实现跨域共享就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中怎么实现跨域共享

本文链接: https://www.lsjlt.com/news/69834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中怎么实现跨域共享
    这篇文章将为大家详细讲解有关JavaScript中怎么实现跨域共享,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。同源策略在客户端编程语言中,如javascr...
    99+
    2024-04-02
  • JavaScript中实现跨域共享的方法有哪些
    本篇文章给大家分享的是有关JavaScript中实现跨域共享的方法有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。同源策略在客户端编程语言...
    99+
    2024-04-02
  • 利用 PHP Session 跨域实现数据共享
    在开发Web应用程序时,我们经常需要在不同的域名之间共享数据。虽然现在有许多方法可以实现跨域数据共享,但使用PHP Session是一种简单有效的方式。本文将介绍如何利用PHP Session跨域实现数据共享,并提供具体的代码示例。一、PH...
    99+
    2023-10-21
    PHP Session 数据共享 跨域
  • JSONP 入门:轻松实现跨域数据共享
    JSONP(JSON with Padding)是一种跨域请求数据的技术,它允许浏览器从其他域名的服务器请求数据,并通过回调函数来处理响应数据。与传统的 Ajax 技术相比,JSONP 更加简单易用,不需要复杂的配置和处理跨域错误,因此非...
    99+
    2024-02-24
    JSONP Ajax 跨域 数据共享
  • 怎么在使用localstorage代替cookie实现跨域共享数据
    这篇文章给大家介绍怎么在使用localstorage代替cookie实现跨域共享数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一,背景 因为网站系统的日益庞大,不同域名业务,甚至不同合作方网站的cooki...
    99+
    2023-06-09
  • 跨域资源共享漏洞怎么修复
    修复跨域资源共享漏洞的方法修复代码如下:public class RefererFilter implements Filter {private static Logger logger = LoggerFactory.getLogger...
    99+
    2024-04-02
  • android跨进程共享数据怎么实现
    Android中跨进程共享数据可以使用以下方法实现:1. 使用Binder机制:Binder是Android中一种轻量级的进程间通信...
    99+
    2023-10-10
    android
  • JavaScript中escape与UNescape怎么在Java中实现共享
    这期内容当中小编将会给大家带来有关JavaScript中escape与UNescape怎么在Java中实现共享,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。众所周知,JavaScript中escape()...
    99+
    2023-05-31
    java escape unescape
  • 如何在JavaScript中实现跨域
    如何在JavaScript中实现跨域?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript的特点1.JavaScript主要用来向HTML页面添加交...
    99+
    2023-06-06
  • SpringMVC域对象共享数据怎么实现
    本文小编为大家详细介绍“SpringMVC域对象共享数据怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringMVC域对象共享数据怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。SpringM...
    99+
    2023-06-30
  • Ajax 中怎么实现跨域
    Ajax 中怎么实现跨域,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 、ajax 跨域调用会有什么问题coolkissbh.com下页...
    99+
    2024-04-02
  • 怎么用kbone实现跨页面通信和跨页面数据共享
    本篇内容介绍了“怎么用kbone实现跨页面通信和跨页面数据共享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • Ubuntu中怎么实现数据共享
    本篇文章给大家分享的是有关Ubuntu中怎么实现数据共享,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Netweaver通过FM RFC_TABLE_ACCESS在系统间共享数...
    99+
    2023-06-03
  • C++中怎么实现共享内存
    C++中怎么实现共享内存,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。初次使用C++标准库实现共享内存的管理时,Vector每次分配内存个数不固定,回收也不固定,这样的话,程序...
    99+
    2023-06-17
  • Linux中怎么实现共享内存
    Linux中怎么实现共享内存,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、概念共享内存是被多个进程共享的一部分物理内存,是进程间共享数据的最快的一种方法。&...
    99+
    2023-06-12
  • 解密 JavaScript 跨域问题:轻松实现跨域通信
    跨域问题成因 跨域问题是指浏览器出于安全考虑,限制了不同域之间的脚本访问。当一个脚本试图访问另一个域上的资源时,就会触发跨域问题。跨域问题通常表现为以下几种情况: AJAX 请求被阻止 WebSocket 连接无法建立 脚本无法访...
    99+
    2024-02-23
    跨域 CORS JSONP WebSocket postMessage
  • 探究JavaScript原型数据共享与方法共享实现
    数据共享 什么样子的数据是需要写在原型中? 需要共享的数据就可以写原型中 原型的作用之一:数据共享 属性需要共享,方法也需要共享: 不需要共享的数据写在构造函数中 ...
    99+
    2024-04-02
  • springcloud怎么实现Session共享
    本篇内容介绍了“springcloud怎么实现Session共享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常情况下,Tomcat、Je...
    99+
    2023-06-05
  • JavaScript实现跨域的方法是什么
    今天小编给大家分享一下JavaScript实现跨域的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • 硬盘怎么实现共享
    实现硬盘共享的方法:1.打开“此电脑”;2.选择硬盘,右键点击“属性”选项;3.切换“共享”选项卡,点击“高级共享”按钮;4.勾选“共享此文件夹”,设置共享权限;具体步骤如下:首先,在计算机桌面中双击打开“此电脑”;进入到此电脑界面后,在界...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作