深入理解前端跨域方法和原理

跨越解决方案之JSONP 这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能。 本篇分享的是:跨越解决方案之JSONP 大家好,我是IT修真院北京分院杨纲,一枚正直纯洁善良的WEB前端程序员。 1.背景介绍 所有支持Javascript的浏览器都会使用同源策略这个安全策略。导致我们无法直... 阅读详情

前言


受浏览器同源策略的限制,本域的js不能操作其他域的页面对象(比如DOM)。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。所以我们要通过一些方法使本域的js能够操作其他域的页面对象或者使其他域的js能操作本域的页面对象(iframe之间)。


这里需要明确的一点是:所谓的域跟js的存放服务器没有关系,比如baidu.com的页面加载了google.com的js,那么此js的所在域是baidu.com而不是google.com。也就是说,此时该js能操作baidu.com的页面对象,而不能操作google.com的页面对象。


跨域的方法总结


单向跨域(一般用于获取数据)


一、使用JSONP跨域


原理:因为通过script标签引入的js是不受同源策略的限制的(正如前文提到的baidu.com的页面加载了google.com的js)。所以我们可以通过script标签引入一个js或者是一个其他后缀形式(如php,jsp等)的文件,此文件返回一个js函数的调用,如返回JSONP_getUsers(["paco","john","lili"]),也就是说此文件返回的结果调用了JSONP_getUsers函数,并且把["paco","john","lili"]传进去,这个["paco","john","lili"]是一个用户列表。那么如果此时我们的页面中有一个JSONP_getUsers函数,那么JSONP_getUsers就被调用到,并且传入了用户列表。此时就实现了在本域获取其他域数据的功能,也就是跨域。

实现例子如下:

前端引入远程js并定义好JSONP_getUsers函数,注意需要先定义好JSONP_getUsers函数,避免在远程js加载完成并调用JSONP_getUsers时,此函数不存在:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //本域为baidu.com  
  2. <script>  
  3.     function JSONP_getUsers(users){  
  4.         console.dir(users);  
  5.     }  
  6. </script>  
  7. //加载google.com的getUsers.php  
  8. <script src="http://www.google.com/getUsers.php"></script>  

需要google.com提供支持,getUsers.php代码如下:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <?php>  
  2.     echo 'JSONP_getUsers(["paco","john","lili"])';//返回一个js函数的调用  
  3. ?>  

为什么script标签引入的文件不受同源策略的限制?因为script标签引入的文件内容是不能够被客户端的js获取到的,不会影响到被引用文件的安全,所以没必要使script标签引入的文件遵循浏览器的同源策略。而通过ajax加载的文件内容是能够被客户端js获取到的,所以ajax必须遵循同源策略,否则被引入文件的内容会泄漏或者存在其他风险。


JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求(虽然采用post+动态生成iframe是可以达到post跨域的目的,但这样做是一个比较极端的方式,不建议采用)。一般get请求能完成所有功能。比如如果需要给其他域服务器传送参数可以在请求后挂参数(注意不要挂隐私数据),即

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <script src="http://www.google.com/getUsers.php?flag=do&time=1"></script>。  
JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。可以看出来JSONP跨域一般用于获取其他域的数据。


一般能够用JSONP实现跨域就用JSONP实现,这也是前端用的最多的跨域方法。


二、动态创建script标签


这种方法其实是JSONP跨域的简化版,JSONP只是在此基础上加入了回调函数。

比如上例中的getUsers.php返回的如果不是一个js函数的调用,而是一个js变量,如:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <?php>  
  2.     echo 'var users=["paco","john","lili"]';//返回一个js变量users  
  3. ?>  
那么在本域下就可以取到data变量,这里需要注意判断script节点是否加载完毕,如:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. js.onload = js.onreadystatechange = function() {  
  2.     if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {  
  3.         console.log(users);//此处取出其他域的数据  
  4.         js.onload = js.onreadystatechange = null;  
  5.     }  
  6. };  

三、flash URLLoader


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


四、Access Control


此跨域方法目前只在很少的浏览器中得以支持,这些浏览器可以发送一个跨域的HTTP请求(Firefox, Google Chrome等通过XMLHTTPRequest实现,IE8下通过XDomainRequest实现),请求的响应必须包含一个Access- Control-Allow-Origin的HTTP响应头,该响应头声明了请求域的可访问权限。例如baidu.com对google.com下的getUsers.php发送了一个跨域的HTTP请求(通过ajax),那么getUsers.php必须加入如下的响应头:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. header("Access-Control-Allow-Origin: http://www.baidu.com");//表示允许baidu.com跨域请求本文件  

五、window.name


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


六、服务器代理


在数据提供方没有提供对JSONP协议或者 window.name协议的支持,也没有对其它域开放访问权限时,我们可以通过server proxy的方式来抓取数据。例如当baidu.com域下的页面需要请求google.com下的资源文件getUsers.php时,直接发送一个指向 google.com/getUsers.php的Ajax请求肯定是会被浏览器阻止。这时,我们在baidu.com下配一个代理,然后把Ajax请求绑定到这个代理路径下,例如baidu.com/proxy/, 然后这个代理发送HTTP请求访问google.com下的getUsers.php,跨域的HTTP请求是在服务器端进行的(服务器端没有同源策略限制),客户端并没有产生跨域的Ajax请求。这个跨域方式不需要和目标资源签订协议,带有侵略性。


双向跨域(两个iframe之间或者两个页面之间,一般用于获取对方数据,document.domain方式还可以直接操作对方DOM)


七、document.domain(两个iframe之间)


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


问题:

1、安全性,当一个站点被攻击后,另一个站点会引起安全漏洞。

2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。


八、location.hash(两个iframe之间),又称FIM,Fragment Identitier Messaging的简写


因为父窗口可以对iframe进行URL读写,iframe也可以读写父窗口的URL,URL有一部分被称为hash,就是#号及其后面的字符,它一般用于浏览器锚点定位,Server端并不关心这部分,应该说HTTP请求过程中不会携带hash,所以这部分的修改不会产生HTTP请求,但是会产生浏览器历史记录。此方法的原理就是改变URL的hash部分来进行双向通信。每个window通过改变其他 window的location来发送消息(由于两个页面不在同一个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于父窗口域名下的一个代理iframe),并通过监听自己的URL的变化来接收消息。这个方式的通信会造成一些不必要的浏览器历史记录,而且有些浏览器不支持onhashchange事件,需要轮询来获知URL的改变,最后,这样做也存在缺点,诸如数据直接暴露在了url中,数据容量和类型都有限等。下面举例说明:


假如父页面是baidu.com/a.html,iframe嵌入的页面为google.com/b.html(此处省略了域名等url属性),要实现此两个页面间的通信可以通过以下方法。


1、a.html传送数据到b.html


(1) a.html下修改iframe的src为google.com/b.html#paco

(2) b.html监听到url发生变化,触发相应操作


2、b.html传送数据到a.html,由于两个页面不在同一个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于父窗口域名下的一个代理iframe


(1) b.html下创建一个隐藏的iframe,此iframe的src是baidu.com域下的,并挂上要传送的hash数据,如src="http://www.baidu.com/proxy.html#data"

(2) proxy.html监听到url发生变化,修改a.html的url(因为a.html和proxy.html同域,所以proxy.html可修改a.html的url hash)

(3) a.html监听到url发生变化,触发相应操作


b.html页面的关键代码如下

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. try {  
  2.     parent.location.hash = 'data';  
  3. } catch (e) {  
  4.     // ie、chrome的安全机制无法修改parent.location.hash,  
  5.     var ifrproxy = document.createElement('iframe');  
  6.     ifrproxy.style.display = 'none';  
  7.     ifrproxy.src = "http://www.baidu.com/proxy.html#data";  
  8.     document.body.appendChild(ifrproxy);  
  9. }  

proxy.html页面的关键代码如下

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //因为parent.parent(即baidu.com/a.html)和baidu.com/proxy.html属于同一个域,所以可以改变其location.hash的值  
  2. parent.parent.location.hash = self.location.hash.substring(1);  

九、使用HTML5的postMessage方法(两个iframe之间或者两个页面之间)


高级浏览器Internet Explorer 8+, chrome,Firefox , Opera  和 Safari 都将支持这个功能。这个功能主要包括接受信息的"message"事件和发送消息的"postMessage"方法。比如baidu.com域的A页面通过iframe嵌入了一个google.com域的B页面,可以通过以下方法实现A和B的通信


A页面通过postMessage方法发送消息:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. window.onload = function() {  
  2.     var ifr = document.getElementById('ifr');  
  3.     var targetOrigin = "http://www.google.com";  
  4.     ifr.contentWindow.postMessage('hello world!', targetOrigin);  
  5. };  

postMessage的使用方法:


otherWindow.postMessage(message, targetOrigin);


otherWindow:   指目标窗口,也就是给哪个window发消息,是 window.frames 属性的成员或者由 window.open 方法创建的窗口

message:   是要发送的消息,类型为 String、Object (IE8、9 不支持)

targetOrigin:   是限定消息接收范围,不限制请使用 '*'


B页面通过message事件监听并接受消息:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. var onmessage = function (event) {  
  2.   var data = event.data;//消息  
  3.   var origin = event.origin;//消息来源地址  
  4.   var source = event.source;//源Window对象  
  5.   if(origin=="http://www.baidu.com"){  
  6. console.log(data);//hello world!  
  7.   }  
  8. };  
  9. if (typeof window.addEventListener != 'undefined') {  
  10.   window.addEventListener('message', onmessage, false);  
  11. } else if (typeof window.attachEvent != 'undefined') {  
  12.   //for ie  
  13.   window.attachEvent('onmessage', onmessage);  
  14. }  
同理,也可以B页面发送消息,然后A页面监听并接受消息。


总结


跨域的方法很多,不同的应用场景我们都可以找到一个最合适的解决方案。比如单向的数据请求,我们应该优先选择JSONP或者window.name,双向通信优先采取location.hash,在未与数据提供方达成通信协议的情况下我们也可以用server proxy的方式来抓取数据。



原文地址:http://blog.youkuaiyun.com/kongjiea/article/details/44201021


Ajax学习笔记Ajax 编程基础 Ajax 运行原理及实现 Ajax 异步编程 Ajax 封装 FormData 对象的实例方法 同源政策 JSONP 代码优化 CORS 跨域资源共享 cookie Ajax 编程基础 Ajax 运行原理及实现 Ajax 异步编程 Ajax 封装 FormData 对象的实例方法 同源政策 JSONP 代码优化 CORS 跨域资源共享 cookie jQuery 中的 Ajax Ajax全局事件 RESTful 和 XML 阅读详情

相关推荐

RT-Thread网络编程:基于STM32F407的TCP客户端实现(含完整代码解析)

本文详细介绍了在STM32F407平台上,基于RT-Thread操作系统和LWIP协议栈实现工业级可靠TCP客户端的完整过程。内容涵盖底层ETH驱动配置、Socket编程、连接保活与断线重连机制、数据收发协议设计以及资源管理,提供了可应用于实际项目的健壮代码框架与调试技巧。

weixin_29184371的博客 492

iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?

iframe解决跨域通信问题

EmotionComputer 4397

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3147

前端使用iframe解决跨域

前端使用iframe解决跨域

yueye_wu的博客 1540

电机控制易混知识点1-基波频率/载波频率/采样频率

在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2191

基于DNN、CNN与SVM的串联电弧故障智能检测:从原理到嵌入式部署

在电气安全与工业物联网领域,时间序列分类是处理传感器信号、实现状态监测与故障诊断的核心技术。其原理在于从连续的信号数据中提取有效特征,并利用机器学习模型识别异常模式。这项技术的核心价值在于能够实现设备预测性维护、提升系统安全性并降低运维成本,广泛应用于智能电表、电机健康监测、电力设备保护等场景。本文聚焦于电气安全中的一个具体且危险的隐患——串联电弧故障的检测。针对这一隐蔽性强、传统方法误报率高的问题,项目深入实践了三种主流AI模型:深度神经网络、卷积神经网络和支持向量机。通过对比DNN的通用特征学习能力、C

weixin_31860973的博客 413

iframe 实现跨域,两页面之间的通信

iframe跨域时,iframe组件之间常用的通信,主要是H5的possmessage方法。一个项目为vue2,一个项目为vue3,两个不同的项目实现iframe嵌入,并实现通信。子页面-vue3, (端口号为127.0.0.1:8081)父页面-vue2(端口号为127.0.0.1:8080)

在路上`的博客 5731

kali虚拟机-----破解wifi密码(WiFi渗透)

文章目录一、将无线网卡挂载到 虚拟机上二、查看是否挂载成功三、查看网卡是否支持监听模式四、检查文件监听影响并杀死影响五、开启无线监听模式六、开始监听七、开始抓包(新建一个命令窗口)八、对已连接的终端进行攻击,使它掉线重连,以此来获取数据包。(新建一个命令窗口)九、开始解密 一、将无线网卡挂载到 虚拟机上 可能出现的问题:在可移动设备处无法连接无线网卡; 解决:在虚拟机设置中将usb控制器设置成如图所示。 注意要先关闭虚拟机在设置。 二、查看是否挂载成功 使用ifconfig命令查看 三、查看网卡是

weixin_46471800的博客 1万+

4种通过iframe跨域与其他页面通信的方式

4种通过iframe跨域与其他页面通信的方式

qq_57289939的博客 1963

心理学量表汇总 50多个 附下载

目录一、心理健康与精神病态量表二、行为问题量表三、人格评估量表四、智力测验一、心理健康与精神病态量表1.一般症状自评量表(SCL-90)症状自评量表 (The self-report symptom inventory ,Symptom checklist ,90,简称 SCL90) 有 90 个评定项目 , 每个项目分五级评分 , 包含了比较广泛的精神病症状学内容, 从感觉、 情 感、思维、意识、行为直至生活习惯、人际关系、饮食等均有涉及,能准确刻划被试的自觉 症状,能较好地反映被试的问题及其严重程度和变

南七小僧的学海无涯 1904

YOLOv9改进策略目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好本专栏自开设两个月以来已经更新改进教程50余篇其中包含RepNCSPELAN4、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv9文档并不能在优快云上传(所有的创新点都经过我的测试是可用的,得到该文件之后大家可以随意组合使用),所以会建立群的形式在内上传我的文件和视频我也会在群内不定期和大家交流回答大家问题,同时定期会更新一些文章的创新点(经过我融合测试后的,先到先得)。

Snu77的博客 1万+

彻底明白前端常用的几种跨域方式

说到跨域,首先要理解什么是跨域,浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。 一.跨域基础知识 http://www.a.com:8080/a.html http://为协议,www为子域名,a.com为主域名,8080为端口,a.html为资源地址,当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了,浏览器认为这不安全

2923

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU

本节课作者就结合论文对YOLOv5进行组合改进(添加CA注意力机制+更改Neck网络之BiFPN+更换损失函数之EIoU),小白必学!

小哥谈 2820

java跨域原理例子,[Java教程]json跨域原理及解决方法

[Java教程]json跨域原理及解决方法0 2016-03-12 20:00:04这一篇文章呢,主要是之前一直听别人讲json跨域跨域,但是还是一头雾水,只知其一,于是一怒之下,翻阅各种资料,如果有不正确的地方,劳烦指正一下^_^首先,先了解浏览器有一个很重要安全性限制,即为同源策略:不同域的客户端脚本在无明确授权的情况下不能读些对方资源。跨域也就是不同源~举个例子:只要协议,端口...

weixin_39806679的博客 123

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

前端跨域jsonp的细节,挡住面试官的连环提问

1.前言 在前端面试中,想必每一个人都会被问到跨域相关的问题,背过八股文的小伙伴肯定对跨域的解决对答如流,常见的跨域解决方案在网上有很多整理,但是如果问到实现的细节,你是否能够手写实现或者深入解读呢?其实很多情况下,面试官不仅仅会考察第一层的概念,还会追问第二层、第三层内容,所以对于实现原理的掌握是必要的,今天笔者就整理一下跨域的基本方式,重点介绍jsonp的实现~ 2.跨域方案 常见的跨域解决方案有8种左右,在面试中能答出4-5种就可以了~ 2.1 如果只是想要实现主域名下的不同子域名的跨域操作,我们

AlexGeek 2795

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

9种常见的前端跨域解决方案(详解)

9种常见的前端跨域解决方案(详解)_慕课手记 (imooc.com)

weixin_43986064的博客 213

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

秋招前端部分面试题

前端部分面试题目

qq_46061082的博客 981

2024年Web前端最新vue api层封装 axios封装(大厂案例),2024年最新web前端面试八股文在哪刷

对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

2401_84617873的博客 371

ajax学习记录2,fecth函数发送ajax请求, jQuery发送AJAX请求,同源策略,原生jsonp实践,使用jQuery发送jsonp请求,CORS

同源策略(Same-OriginPolicy)最早是由Netscape公司提出,是浏览器的一种安全策略。同源协议、域名、端口号必须完全相同。使用jQuery发送jsonp请求。

qq_49080239的博客 309

JavaScript反爬笔记(3)_JS进阶(摘要版)_构造函数+原型链+回调函数+事件循环+异步编程+浏览器存储+跨域+Webpack

一、构造函数 二、原型链 三、回调函数 四、事件循环 五、异步编程 六、浏览器储存 七、跨域 八、Webpack打包 一、构造函数 1 定义:当任意一个普通函数用于创建一类对象时,它就被称作构造函数。在 JavaScript 中是指用 new 关键字来调用的函数 2 执行流程: (1)当以 new 关键字调用时,会创建一个新的内存空间 (2)函数体内部的 this ...

zhsworld的博客 521

resume questions

1. 先自我介绍了一下 2.介绍一下自己做过的项目用到哪些技术和栈 3. 讲下js数据基本类型 4. 介绍下ES6有哪些新方法 5.讲下var,let,const的区别(const定义的对象,里面的属性可以更改吗?是可以的.因为const指针指向的地址不可以变化,指向地址的内容可以变化。) 9. vue的生命周期。什么时候用到bedforeDestory? 10.什么是跨域? 11.地址栏输入地址回车直到渲染的整个过程(详细讲下页面渲染过程) 12.组件之间如何通信 13.key的作用(.

m0_63701007的博客 166

面经练习(十三)

面经练习(十三)1.with的用法2.cors跨域原理3.jsonp为什么只能get请求4.toString()方法和Object.prototype.toString.call()方法对比5.https为什么采取对称非对称加密结合的方法6.圣杯布局双飞翼布局7.多路复用技术8.requestAnimationFrame是什么9.从输入URL到浏览器显示页面发生了什么(详细版)10.回文链表11.模拟LRU缓存机制12 UDP如何实现可靠传输13.堆和栈区别14.数组和链表的区别及优缺点 1.with的用法

qq_25503949的博客 479

深入理解跨域和原理--学习笔记

参考于该文https://www.cnblogs.com/daodaowei/p/5877954.html 拼多多面试题: 1.Script标签为什么可以跨域,底层是如何实现的(为什么script标签引入的文件不受同源策略的限制?) 答:因为script标签引入的文件内容是不能够被客户端的js获取到的,不会影响到被引用文件的安全,所以没必要使script标签引入的文件遵循浏览器的同源策略。而通过a...

lm_four的博客 212
上一篇: AJAX的刷新和前进后退问题解决
下一篇: 图片轮播
闪闪趴蚊
博客等级 码龄11年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值