Cors 什么是不透明的回应?它有什么作用?

Cors 什么是不透明的回应?它有什么作用?,cors,fetch-api,Cors,Fetch Api,我试图获取一个旧网站的URL,但出现了一个错误: 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 m

我试图
获取一个旧网站的URL,但出现了一个错误:

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'})
好了,现在可以了。。。但我看不懂=\


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

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

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


这就是
{mode:'no cors'}
的目的。

还有Node JS应用程序的解决方案。CORS Anywhere是一个NodeJS代理,它将CORS头添加到代理请求中

代理的url实际上是从路径中获取的,经过验证和代理。代理URI的协议部分是可选的,默认为“http”。如果指定了端口443,则协议默认为“https”


除了cookie之外,此包对http方法或头没有任何限制。不允许请求用户凭据。可以将应用程序配置为需要用于代理请求的标头,例如,以避免来自浏览器的直接访问

javascript获取答案有点棘手,我通过从后端获取api,然后将其调用到前端解决了这个问题

public function get_typechange () {

    $ url = "https://........";
    $ json = file_get_contents ($url);
    $ data = json_decode ($ json, true);
    $ resp = json_encode ($data);
    $ error = json_last_error_msg ();
    return $ resp;

}

但是
状态代码总是
0
,如果
状态从不为200
,如何检查它是否成功?您不能。它是黑盒的一部分。