Page 243 - Web性能权威指南
P. 243
➊ 验证许可的预备 OPTIONS 请求
➋ 第三方源的成功预备响应
➌ 实际的 CORS 请求
W3C 官方的 CORS 规范规定了何时何地必须使用预备请求:“简单的”请求可以跳
过它,但很多条件下这个请求都是必需的,因此也会为验证许可而增加仅有一次往
返的网络延迟。好在,只要完成预备请求,客户端就会将结果缓存起来,后续请求
就不必重复验证了。
CORS 得到了所有现代浏览器支持,参见:caniuse.com/cors。要全面了解
CORS 的各种策略及实现,请参考 W3C 官方标准(http://www.w3.org/TR/
cors/)。
15.3 通过XHR下载数据
XHR 既可以传输文本数据,也可以传输二进制数据。事实上,浏览器可以自动为各
种原生数据类型提供编码和解码服务,因此应用在直接将这些数据传给 XHR 时就
已经编码 / 解码好了,反之亦然。浏览器可以自动解码的数据类型如下。
• ArrayBuffer
固定长度的二进制数据缓冲区。
• Blob
二进制大对象或不可变数据。
• Document
解析后得到的 HTML 或 XML 文档。
• JSON
表示简单数据结构的 JavaScript 对象。
• Text
简单的文本字符串。
浏 览 器 可 以 依 靠 HTTP 的 content-type 首 部 来 推 断 适 当 的 数 据 类 型( 比 如 把
application/json 响应解析为 JSON 对象),应用也可以在发起 XHR 请求时显式重
写数据类型:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/images/photo.webp');
230 | 第 15 章