What is an opaque response, and what purpose does it serve?

大城市里の小女人 提交于 2019-11-26 06:17:27

问题


I tried to fetch the URL of an old website, and an error happened:

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.

I understood the message, and tried to do a request that returns an opaque response:

fetch(\"http://xyz\", {\'mode\': \'no-cors\'})

Ok, it now works... but I can\'t read it. =\\

What\'s the purpose then, of an opaque response?


回答1:


Consider the case in which a service worker acts as an agnostic cache. Your only goal is serve the same resources that you would get from the network, but faster. Of course you can't ensure all the resources will be part of your origin (consider libraries served from CDNs, for instance). As the service worker has the potential of altering network responses, you need to guarantee you are not interested in the contents of the response, nor on its headers, nor even on the result. You're only interested on the response as a black box to possibly cache it and serve it faster.

This is what { mode: 'no-cors' } was made for.




回答2:


Opaque responses can't be accessed by JavaScript, but you can still cache them with the Cache API and respond with them in the fetch event handler in a service worker. So they're useful for making your app offline, also for resources that you can't control (e.g. resources on a CDN that doesn't set the CORS headers).




回答3:


There's also solution for Node JS app. CORS Anywhere is a NodeJS proxy which adds CORS headers to the proxied request.

The url to proxy is literally taken from the path, validated and proxied. The protocol part of the proxied URI is optional, and defaults to "http". If port 443 is specified, the protocol defaults to "https".

This package does not put any restrictions on the http methods or headers, except for cookies. Requesting user credentials is disallowed. The app can be configured to require a header for proxying a request, for example to avoid a direct visit from the browser. https://robwu.nl/cors-anywhere.html



来源:https://stackoverflow.com/questions/36292537/what-is-an-opaque-response-and-what-purpose-does-it-serve

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!