我试图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.
我理解了消息,并尝试执行一个返回不透明响应的请求:
fetch("http://xyz", {'mode': 'no-cors'})
好了,现在起作用了..。但我看不懂。=\
那么,一个不透明的反应的目的是什么?
发布于 2016-03-30 00:26:33
考虑服务工作者充当不可知论缓存的情况。您唯一的目标是提供与网络相同的资源,但速度更快。当然,您不能确保所有的资源都是您的来源的一部分(例如,考虑从CDN提供的库)。由于服务工作者具有更改网络响应的潜力,因此您需要确保您对响应的内容、对其头,甚至对结果都不感兴趣。您只对响应感兴趣,因为它是一个黑匣子,可以缓存它并更快地服务它。
这就是{ mode: 'no-cors' }
的目的。
发布于 2016-03-29 12:08:59
JavaScript无法访问不透明的响应,但您仍然可以使用缓存API缓存它们,并在服务工作人员的fetch
事件处理程序中响应它们。因此,它们对于使您的应用程序脱机很有用,对于您无法控制的资源(例如,CDN上不设置CORS头的资源)也很有用。
发布于 2017-11-30 14:07:36
Node应用程序也有解决方案。CORS Anywhere是一个NodeJS代理,它将CORS头添加到代理请求中。
代理的url实际上是从路径中获取的,经过验证和代理。代理URI的协议部分是可选的,默认为"http“。如果指定了端口443,则协议默认为"https“。
除了cookie之外,此包不对http方法或标头设置任何限制。不允许请求用户凭据。该应用程序可以配置为需要一个头来代理请求,例如,为了避免浏览器的直接访问。https://robwu.nl/cors-anywhere.html
https://stackoverflow.com/questions/36292537
复制相似问题