不透明な応答とは何ですか?それはどのような目的に役立ちますか?


172

fetch古いWebサイトの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'})

わかりました、動作します...しかし、私はそれを読むことができません。= \

では、不透明な反応の目的は何でしょうか?

回答:


149

Service Workerが不可知論的キャッシュとして機能する場合を考えてみます。あなたの唯一の目標は、ネットワークから得られるのと同じリソースをより速く提供することです。もちろん、すべてのリソースがオリジンの一部になることを保証することはできません(たとえば、CDNから提供されるライブラリを検討してください)。Service Workerはネットワーク応答を変更する可能性があるため、応答の内容、ヘッダー、結果には関心がないことを保証する必要があります。あなたはおそらくそれをキャッシュしてより速く提供するためのブラックボックスとしての応答にのみ興味があります。

これ{ mode: 'no-cors' }が作られました。


2
しかし、Status code常に0、それが成功したかどうかを確認する方法はstatus is never 200
Angshuman Agarwal

3
できません。これはブラックボックスの一部です。
Salva

67

不透明な回答では、JavaScriptによってアクセスすることはできませんが、あなたはまだ、それらをキャッシュすることができるキャッシュAPIで彼らとし、応答fetchサービスワーカーでのイベントハンドラ。そのため、アプリをオフラインにしたり、制御できないリソース(CORSヘッダーを設定しないCDN上のリソースなど)にも役立ちます。


1

Node JSアプリのソリューションもあります。CORS Anywhereは、プロキシされたリクエストにCORSヘッダーを追加するNodeJSプロキシです。

プロキシするURLは文字通りパスから取得され、検証およびプロキシされます。プロキシされるURIのプロトコル部分はオプションであり、デフォルトは「http」です。ポート443が指定されている場合、プロトコルはデフォルトで「https」になります。

このパッケージは、Cookieを除き、httpメソッドまたはヘッダーに制限を課しません。ユーザー資格情報の要求は許可されていません。たとえば、ブラウザーからの直接アクセスを回避するために、リクエストをプロキシするためのヘッダーを要求するようにアプリを構成できます。https://robwu.nl/cors-anywhere.html


-2

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;

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.