Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果响应为404,如何使用服务工作者缓存跨域资源?_Javascript_Caching_Cross Domain_Service Worker - Fatal编程技术网

Javascript 如果响应为404,如何使用服务工作者缓存跨域资源?

Javascript 如果响应为404,如何使用服务工作者缓存跨域资源?,javascript,caching,cross-domain,service-worker,Javascript,Caching,Cross Domain,Service Worker,w3: 6.2跨来源资源和COR 应用程序倾向于缓存来自CDN或其他来源的项目。 可以使用, 和元素。如果这种运行时 脱机时协作中断。 类似地,在以下情况下,可以XHR许多种类的非原始资源: 设置了适当的CORS标头 ServiceWorkers通过允许缓存从源服务器获取和缓存来实现这一点 项目。然而,也有一些限制。首先,与同源资源不同 它们在缓存中作为响应对象管理,并设置了type属性 对于“基本”,存储的对象是设置了type属性的响应对象 “不透明”。“不透明”类型的响应提供的API远不如

w3:

6.2跨来源资源和COR
应用程序倾向于缓存来自CDN或其他来源的项目。 可以使用
元素。如果这种运行时 脱机时协作中断。 类似地,在以下情况下,可以XHR许多种类的非原始资源: 设置了适当的CORS标头

ServiceWorkers通过允许缓存从源服务器获取和缓存来实现这一点 项目。然而,也有一些限制。首先,与同源资源不同 它们在缓存中作为响应对象管理,并设置了type属性 对于“基本”,存储的对象是设置了type属性的响应对象 “不透明”。“不透明”类型的响应提供的API远不如 答复类型为“基本”;不能读取或设置正文和标题,也不能设置多个正文和标题 检查其内容的其他方面。它们可以传递给 event.respondWith(r)方法,其方式与键入“basic”的响应相同, 但不能以编程方式有意义地创建。这些限制是 必须保留平台的安全不变量。允许缓存 存储它们允许应用程序在大多数情况下避免重新设计

我将CORS标题设置为:

Access-Control-Allow-Origin:https://xxx.xx.x.com
Access-Control-Allow-Credentials:true
但我仍然得到一个“不透明”的响应,我不能确保代码是200。 如果缓存这些不成功的响应,将导致一些问题

例如,一个网络密友对跨域资源造成404攻击, 我缓存它,然后我将始终使用404缓存响应,即使在
网络问题已得到纠正。同一来源的资源没有此问题。

不幸的是,无法检测它


出于安全原因,这是明确不允许的:.

请求的
模式
(据称)。(我之所以说“据称”,是因为我相信我见过这样的情况:在
fetch()
中使用隐式创建的
请求
会导致启用CORS的
响应

因此,如果您知道您的服务器支持CORS,您应该明确选择CORS:

var corsRequest = new Request(url, {mode: 'cors'});
fetch(corsRequest).then(response => ...); // response won't be opaque.

给定正确配置的远程服务器,启用CORS的
请求
将产生具有。与
“不透明的”
响应不同,
“cors”
响应
将暴露底层的
状态
主体
,等等。

非常感谢!!!这对我来说真的很有效。mua ~~这里的问题是,您最初是如何通过服务工作者隧道发送请求的。如果那些使用“无cors”,那就是你得到的<代码>新请求(“x”)。模式
返回“cors”。