什么是不透明的回应,它的目的是什么?

Mig*_*elo 157 cors fetch-api

我尝试fetch了旧网站的网址,发生了错误:

Fetch API cannot load http://xyz.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://abc' is therefore not allowed access.
If an opaque response serves your needs, set the request's mode to 'no-cors'
to fetch the resource with CORS disabled.
Run Code Online (Sandbox Code Playgroud)

我理解了该消息,并尝试执行返回不透明响应的请求:

fetch("http://xyz", {'mode': 'no-cors'})
Run Code Online (Sandbox Code Playgroud)

好吧,它现在有效...但我无法阅读它.= \

那么,不透明的反应的目的是什么?

Sal*_*lva 139

考虑服务工作者充当不可知缓存的情况.您唯一的目标是提供从网络获得的相同资源,但速度更快.当然,您无法确保所有资源都是您的原始资源(例如,考虑从CDN提供的库).由于服务工作者有可能改变网络响应,因此您需要保证您对响应的内容,标题,甚至结果都不感兴趣.你只对作为黑盒子的响应感兴趣,可以缓存它并更快地提供它.

这就是{ mode: 'no-cors' }为此而做的.

  • 但是 `Status code` 总是 `0`,如果 `status` 永远不是 200` 如何检查它是否成功? (2认同)
  • 你不能。它是_blackbox_的一部分。 (2认同)
  • 如果不透明的响应就像一个黑匣子,那么如果它是一个损坏的响应怎么办?例如,如果我们缓存了它,那么稍后当它被使用时,它将是一个损坏的响应......? (2认同)

Mar*_*rco 64

JavaScript无法访问不透明的响应,但您仍然可以使用Cache API缓存它们,并fetch在服务工作者的事件处理程序中使用它们进行响应.因此,它们对于使您的应用程序脱机,以及无法控制的资源(例如,未设置CORS标头的CDN上的资源)非常有用.