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 章
   238   239   240   241   242   243   244   245   246   247   248