第21章 AJAX

4、跨域源资源共享

CORS跨域源资源共享,其背后思想,是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功。

1、IE对CORS的实现

在IE8中引入了XDR类型,类似于XHR。所有XDR请求都是异步执行,所以open()只接收两个参数。

2、其他浏览器对CORS的实现

通过XHR对象实现对CORS的原生支持。要请求位于另一个域中的资源,使用标准的XHR对象并在open()方法中传入绝对URL即可。

对于本地资源,最好使用相对URL,在访问远程资源时再使用绝对URL。

3、Preflighted Requests

透明服务器验证机制。

4、带凭据的请求

withCredentials属性设置为true。如果发送的是带凭据的请求,但是服务器的响应中没有包含接受带凭据的请求的头部,那么浏览器不会把响应交给JS,所以responseText为空字符串,status为0,而且会调用onerror事件处理程序。

5、跨浏览器的CORS

检查XHR是否支持CORS的最简单方式,就是检查是否存在withCredentials属性,再结合XdomainRequest对象是否存在,就可以兼顾所有浏览器了。

5、其他跨域技术

1、图像Ping

用于浏览器与服务器间的单向通信。只能发送GET请求,无法访问服务器的响应文本。

2、JSONP

JSON with padding,填充式JSON或参数式JSON.

JSONP由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,数据是传入回调函数的JSON数据。JSONP通过动态<script>元素来使用的。

3、Comet(服务器推送)

是一种服务器向页面推送数据的技术,适合处理体育比赛的分数和股票报价。

两种实现Comet的方式——长轮询和流。

短轮询:浏览器定时向服务器发送请求,看有没有更新的数据。

长轮询:页面发起一个到服务器的请求,然后服务器一直保持连接打开,直到有数据可以发送,发送完数据之后,浏览器关闭连接,随即又发起一个到服务器的新请求。

轮询通过XHR对象和setTimeout()可以实现。

HTTP流,不同于轮询,它在页面的整个生命周期内只使用一个HTTP连接,就是浏览器向服务器发送一个请求,而服务器保持连接打开,然后周期性地向浏览器发送数据。

4、服务器发送事件(SSE)。

①SSE API用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。

②事件流。

5、Web Sockets

传递的数据包小,所以适合移动应用。

6、SSE与Web Sockets

考虑使用SSE还是WS,考虑如下几个因素:①是否有自由度建立和维护WS服务器?因为WS协议不同于HTTP,现有服务器不能用于WS通信。②是否需要双向通信,如果只需读取服务器数据,SSE可以满足,结合XHR和SSE也可以实现双向通信。

6、安全

CSRF跨站点请求伪造。

js-JavaScript高级程序设计学习笔记18的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  4. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  5. JavaScript高级程序设计学习笔记--DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Ele ...

  6. Javascript高级程序设计学习笔记一

    看完w3school的javascript的概念,有点基础,开始红皮书的路程,今晚总结前二章的心得. 第一章:javascript简介 重点是javascript的实现是由 ECMAScript(核心 ...

  7. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  8. JavaScript高级程序设计学习笔记第十章--DOM

    1.DOM:文档对象模型,是针对 HTML 和 XML 文档的一个 API(应用程序编程接口). 2.DOM 可以将任何 HTML 或 XML 文档描绘成一个由多层节点构成的结构. 3.文档节点是每个 ...

  9. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  10. JavaScript高级程序设计学习笔记之事件

    1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...

随机推荐

  1. WARN util.NativeCodeLoader: Unable to load native-hadooplibrary for your platform… using builtin-java classes where applicable

    方法1glibc 官方要求的2.14版本以上 方法2:http://www.secdoctor.com/html/yyjs/31101.html 方法3: http://dl.bintray.com/ ...

  2. 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)

    当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,duang~duang~duang,我用了是这样,你们用了也是这样,看起来这 ...

  3. subtable

  4. .net混淆、反编译工具调查

    常用的工具列表[比较常见的] 混淆器.加密 Dotfuscator VS默认带的工具,不过是个社区版 强度不大 dotNET Reactor 使用了NativeCode 和混淆的形式 Xenocode ...

  5. Windows 8.1 新增控件之 Hyperlink

    Hyperlink 控件应该不用过多介绍大家肯定十分清楚其作用,它的功能就像HTML中的<a href="">标签一样,只不过是在XAML中实现. 使用Hyperlin ...

  6. CSS3 3D骰子

    z zz zz zzzz zzzzz zzzzzz

  7. C#加密解密大全

    1.方法一 (不可逆加密)     public string EncryptPassword(string PasswordString,string PasswordFormat )      { ...

  8. 学习C++.Primer.Plus 7 函数

    C++的返回值类型不能是数组 函数原型中的变量名相当于点位符,因此不要求提供变量名. void cheers(int); C++中不指定参数列表时就使用活力号: void saybye(...); 通 ...

  9. TinyFrame升级之十:WCF Rest Service注入IOC的心

    由于在实际开发中,Silverlight需要调用WebService完成数据的获取,由于之前我们一直采用古老的ASMX方式,生成的代理类不仅难以维护,而且自身没有提供APM模式的调用方式,导致在Sin ...

  10. es6+react环境搭建

    工具说明 Node Koa React Webpack 项目结构 - build 客户端代码的构建文件目录 - config 项目的配置文件 - docs 项目相关的文档目录 - lib 服务端库文件 ...