`
bsr1983
  • 浏览: 1117437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

第五章 Communication API

 
阅读更多

第五章 Communication API

5.1 跨文档消息通信

跨文档消息通信可以确保iframe、标签页、窗口间安全地进行跨源通信。它把postMessage API定义为发送消息的标准方式。利用postMessage发送消息非常简单,代码如下所示:

chatFrame.contextWindow.postMessage('Hello,world','http://www.example.com');

接收消息时仅需在页面种增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。

消息事件是一个拥有data(数据)和origin(源)属性的DOM事件。data属性是发送方传递的实际消息,而origin属性是发送来源。

postMessage API不仅可以胜任同源文档间的通信,而且在浏览器不允许非同源通信的情况下,postMessage API也很有用。鉴于它的一致性和易用性,在同源文档间通信时也推荐使用postMessage。在JavaScript环境的通信中始终应使用postMessage API,例如使用HTML5 Web Worker通信时。

5.1.1 理解源安全

HTML5荣光引入源(origin)的概念对域安全进行了阐明和改进。源是在网络上用来建立信任关系的地址的子集。源由规则(scheme)、主机(host)、端口(post)组成。

源的概念中不考虑路径。

HTML5定义了源的序列化。源在API和协议中以字符串的形式出现。

postMessage的安全规则确保了消息不会被传递到非预期的源页面中。当发送消息时,由发送方制定接收方的源。如果发送方用来调用postMessage的窗口不具有特定的源(例如用户跳转到了其他站点),浏览器就不会传送消息。

类似地,接受消息的时候,发送方的源也被作为消息的一部分。为避免伪造,消息源由浏览器提供。接收方可以决定处理哪些消息,以及忽略哪些消息。我们可以保留一份白名单,告诉浏览器仅仅处理可信源的消息。

最好永远不要对来自第三方的字符串求值。再者,要避免使用eval方法处理应用内部字符串。可以通过window.JSON或者json,.org解析器使用JSON。

5.1.2 跨文档消息通信的浏览器支持情况

5.1.3 使用postMessage API

提示 HTML5定义的MessageEvent接口也是HTML5 WebSockets和HTML5 WebWorkers的一部分。HTML5的通信功能用用于接受消息的API与MessageEvent接口是一致的。其他通信类API,如EventSource API和Web Workers,也都是使用MessageEvent接口来传递消息。

5.1.4 使用postMessage API创建应用

5.2 XMLHttpRequest Level2

作为XMLHttpRequest的改进版,XMLHttpRequest Level2在功能上有了很大的改进。主要集中在两个方面:

(1)跨源XMLHttpRequests;

(2)进度事件(Progress events)

5.2.1 跨源XMLHttpRequst

XMLHttpRequestLevel2通过CORS(Cross Origin Resource Sharing,跨源资源共享)实现了跨源XMLHttpRequests。

跨源HTTP请求包括一个Origin头部,拓为服务器提供HTTP请求的源信息。头部由浏览器保护,不能被应用程序代码修改。从本质上讲,它与跨文档消息通信中消息事件的origin属性作用相同。

CORS规范要求,对一些敏感行为——如申请证书的请求或除了GET和POST以外的OPTIONS预检(preflight)请求,必须由浏览器发送给服务器,以确定这种行为能否被支持和允许,这意味着成功通信的背后或许需要由具备CORS出了能力的服务器来支持。

5.2.2 进度事件

新版XMLHttpRequest中最重要的API改进之一是增加了对进度的响应。

XMLHttpRequest Level2用了一个有意义的名字Progress进度来命名进度事件。

5.2.5 创建XMLHttpRequest应用

5.3 进阶功能

5.3.1 结构化的数据

早期版本的postMessage仅支持字符串。后来的版本支持JavaScript对象、canvas imageData和文件等其他数据类型。由于不同浏览器对规范支持的差异,对不同的对象类型的支持情况也不同。

5.3.2 Framebusting

Framebusting技术可以用来保证某些内容不被加载到jframe中。应用程序首先检测其所在的窗口是否为最外层的窗口(window.top),若不是则跳脱包含它的框架,代码如下所示:

if(window!=window.top)

{

window.top.location=location;

}

分享到:
评论

相关推荐

    HTML5高级程序设计第二版

    第1章 HTML5概述 第2章 Canvas API ...第5章 Communication API 第6章 WebSockets API 第7章 Forms API 第8章 Web Workers API 第9章 Web Storage API 第10章 构建离线Web应用 第11章 HTML5未来展望

    HTML5高级程序设计

    第5章 communication api 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postmessage api 97 5.1.4 使用postmessage api创建应用 98 5.2 xmlhttprequest ...

    完整版《HTML5高级程序设计》2

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest Level ...

    完整版《HTML5高级程序设计》5

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest Level ...

    完整版《HTML5高级程序设计》4

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest Level ...

    HTML5高级程序设计.part5

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest ...

    完整版《HTML5高级程序设计》3

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest Level ...

    HTML5高级程序设计.part4

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest ...

    HTML5高级程序设计.part1

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest ...

    HTML5高级程序设计.part2

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest ...

    HTML5高级程序设计.part3

    第5章 Communication API 94 5.1 跨文档消息通信 94 5.1.1 理解源安全 96 5.1.2 跨文档消息通信的浏览器支持情况 97 5.1.3 使用postMessage API 97 5.1.4 使用postMessage API创建应用 98 5.2 XMLHttpRequest ...

    (推荐)Win32 API大全

    第五章 国际特性函数(International Peatures Punction)时性…………………………815 5.1 输入方法编辑函数(Input Method Editor)…………………………………………815 5.2 国家语言支持函数(National ...

    c#调用API远程控制

    1. OAuth 2.0:为了保护API的安全,通常会采用OAuth 2.0这样的授权框架,它允许用户授予第三方应用访问他们资源的权限,而无需分享他们的密码。 2. JSON Web Tokens (JWT):JWT是一种轻量级的身份验证机制,服务器...

    NET调用API源码

    在.NET框架中,调用API通常通过HTTP客户端库或Web服务客户端实现,例如使用HttpClient类来发送HTTP请求,或者使用WCF(Windows Communication Foundation)来访问SOAP服务。下面将详细阐述这一主题。 首先,...

    windows api大全 chm版

    第五章 国际特性函数(International Peatures Punction)时性…………………………815 5.1 输入方法编辑函数(Input Method Editor)…………………………………………815 5.2 国家语言支持函数(National Language...

    新编Windows API 参考大全(CHM 中文版)

    第五章 国际特性函数(International Peatures Punction)时性…………………………815 5.1 输入方法编辑函数(Input Method Editor)…………………………………………815 5.2 国家语言支持函数(National ...

    windows程序设计第五版源代码14-23章

    《Windows程序设计第五版》是Peter van der Linden的经典著作,深入浅出地讲解了Windows操作系统下的程序开发技术。源代码14-23章涵盖了从第14章到第23章的内容,这部分通常涉及Windows API的高级用法、线程管理、...

    HTML5程序设计(第2版).[荷]Peter Lubbers(带详细书签).pdf

    第5章 Geolocation API 96 5.1 位置信息 96 5.1.1 纬度和经度坐标 96 5.1.2 位置信息从何而来 97 5.1.3 IP地址地理定位数据 98 5.1.4 GPS地理定位数据 98 5.1.5 Wi-Fi地理定位数据 98 5.1.6 手机地理定位数据...

    WinSoft_Communication_Protocol_Suite_for_.NET_v3.0_Downloadly.ir.rar

    使用WinSoft Communication Protocol Suite时,开发者可以利用其API(应用程序编程接口)来调用预定义的函数和方法,实现与各种通信协议的交互。API的设计应当遵循易用性和灵活性原则,让开发者能够根据具体需求进行...

Global site tag (gtag.js) - Google Analytics