205

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

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

それでは、不透明な応答の目的は何ですか?

4

4 に答える 4

167

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

これは、その{ mode: 'no-cors' }ために作られたものです。

于 2016-03-30T08:26:33.430 に答える
76

JavaScript から不透明な応答にアクセスすることはできませんが、キャッシュ APIfetchを使用してそれらをキャッシュし、Service Worker のイベント ハンドラーで応答することができます。そのため、アプリをオフラインにする場合や、制御できないリソース (CORS ヘッダーを設定しない CDN 上のリソースなど) にも役立ちます。

于 2016-03-29T20:08:59.940 に答える
-6

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;

}
于 2020-03-27T17:02:07.690 に答える