@@ -298,7 +298,7 @@ localStorage.clear()
298
298
299
299
浏览器内部的数据库,可用于存储大容量的结构化(或二进制数据)数据。目前有两个比较好用的库。
300
300
301
- #### localforage
301
+ #### localforage库
302
302
303
303
更像容量加强版的LocalStorage,感觉读写性能并不是很高,特点是在不支持IndexedDB的浏览器中会从IndexedDB实现降级成LocalStorage实现。
304
304
@@ -315,7 +315,7 @@ if (hasLocalCache) {
315
315
}
316
316
```
317
317
318
- #### Dexie
318
+ #### Dexie库
319
319
320
320
更贴近IndexedDB底层操作,读写性能更高。
321
321
@@ -470,7 +470,9 @@ const data = jwt.verify(token, 'key')
470
470
471
471
#### 跨站(Cross Site)
472
472
473
- 同站要求两个源的顶级域和一级域都相同。
473
+ ![ ] ( ../static/img/tld.png )
474
+
475
+ 同站要求两个源的顶级域和一级域都相同,即这里的` TLD+1 ` 完全相同。
474
476
475
477
![ ] ( ../static/img/samesite.png )
476
478
@@ -546,6 +548,34 @@ Access-Control-Allow-Headers: x-my-header
546
548
547
549
548
550
551
+ ### 跨域隔离(cross-origin isolation)
552
+
553
+ 为了在我们的项目中使用` SharedArrayBuffer ` 来实现多个线程的共享内存,我们需要开启跨域隔离,这要求我们的网站同时开启了跨源开放者政策Cross Origin Opener Policy(COOP)和跨源嵌入程序策略Cross Origin Embedder Policy(COEP),即我们返回顶级文档的响应需要带上这样的响应头:
554
+
555
+ ``` http
556
+ Cross-Origin-Opener-Policy: same-origin
557
+ Cross-Origin-Embedder-Policy: require-corp # or credentialless
558
+ ```
559
+
560
+ 我们可以通过` window.crossOriginIsolated ` 来检测当前站点是否开启了跨域隔离。
561
+
562
+ #### Cross Origin Opener Policy(COOP)
563
+
564
+ 通常我们在某个页面通过` window.open ` 来打开一个新的页面时,这两个页面是共享一个渲染进程的,被打开页面可以通过` window.opener ` 访问父页面的上下文。通过设置COEP能够禁止跨域页面的该行为
565
+
566
+
567
+
568
+ #### Cross Origin Embedder Policy(COEP)
569
+
570
+ 我们都知道` img ` 、` video ` 、` script ` 等标签加载资源是不受浏览器同源策略限制的,而通过设置COEP能够禁止这些静态资源的跨域访问。
571
+
572
+ 这个策略几乎使得我们的页面不可用,浏览器提供了两种方式让某个资源可以跨域访问:
573
+
574
+ - CORS。服务端给对应资源返回CORS头,同时要求加载资源的标签需要带上` crossorigin=anonymous ` 或者` crossorigin=use-credentials ` 。
575
+ - ** Cross Origin Resource Policy** (CORP)。服务端给对应资源返回CORP头` Cross-Origin-Resource-Policy: cross-origin `
576
+
577
+
578
+
549
579
### JSONP
550
580
551
581
简单来讲,JSONP是利用了` <script> ` 加载资源时不受同源策略限制。以往我们在` src ` 里写的是资源的地址,但这里我们是在给接口发请求,同时接口返回的文本会被我们当成JS解析。
@@ -598,7 +628,23 @@ window.on('message', function (e) {
598
628
599
629
> TODO
600
630
631
+ ### [ SharedArrayBuffer] ( https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer )
632
+
633
+ 在上文中,我们介绍了在Web Worker的多线程场景下,借助指定转移对象可以实现ArrayBuffer的零拷贝,这满足了我们部分的使用场景。但在一些情况下,我们期望主线程和Worker线程能够读写同一块内存,SharedArrayBuffer就是用来做这个的。
601
634
635
+ ``` js
636
+ const sab = new SharedArrayBuffer (1024 );
637
+ worker .postMessage (sab);
638
+ ```
639
+
640
+
641
+
642
+ 但是想要开启SharedArrayBuffer的能力,我们需要设置两个 HTTP 消息头以跨域隔离你的站点:COOP和COEP
643
+
644
+ ``` js
645
+ Cross- Origin- Opener- Policy: same- origin
646
+ Cross- Origin- Embedder- Policy: require- corp
647
+ ```
602
648
603
649
604
650
0 commit comments