JavaScript コードでは「要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません」というエラーが表示されるのに、Postman では表示されないのはなぜですか? 質問する

JavaScript コードでは「要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません」というエラーが表示されるのに、Postman では表示されないのはなぜですか? 質問する

Mod の注記: この質問は、ブラウザ上の / などが Same Access Policy 制限の対象 (CORB または CORS に関するエラーが発生する) であるのに、Postman は対象とならないXMLHttpRequest理由についてです。この質問は、「No 'Access-Control-Allow-Origin'...」エラーを修正する方法についてのものではありません。このエラーが発生する理由についてです。fetch

投稿をやめてください:

  • あらゆる言語/フレームワークのCORS設定。代わりに関連する言語/フレームワークの質問を見つける
  • CORS を回避するリクエストを許可するサードパーティのサービス
  • さまざまなブラウザで CORS をオフにするためのコマンドライン オプション

私は認証をしようとしていますJavaScript接続することでRESTful API内蔵フラスコただし、リクエストを行うと、次のエラーが発生します。

XMLHttpRequest cannot load http://myApiUrl/login. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'null' is therefore not allowed access.

APIまたはリモートリソースがヘッダーを設定する必要があることはわかっていますが、Chrome拡張機能経由でリクエストを送信したときに機能したのはなぜですか?郵便配達員?

リクエストコードは次のとおりです:

$.ajax({
  type: 'POST',
  dataType: 'text',
  url: api,
  username: 'user',
  password: 'pass',
  crossDomain: true,
  xhrFields: {
    withCredentials: true,
  },
})
  .done(function (data) {
    console.log('done');
  })
  .fail(function (xhr, textStatus, errorThrown) {
    alert(xhr.responseText);
    alert(textStatus);
  });

ベストアンサー1

私の理解が正しければ、あなたはXMLHttpリクエストページが配置されているドメインとは異なるドメインにリクエストを送信しようとしています。通常、ブラウザはセキュリティ上の理由から同じオリジンのリクエストを許可するため、これをブロックしています。クロスドメイン リクエストを実行する場合は、別の方法を使用する必要があります。

Postmanを使用している場合、このポリシーによる制限はありません。引用元クロスオリジン XMLHttpRequest:

通常の Web ページでは、XMLHttpRequest オブジェクトを使用してリモート サーバーとデータを送受信できますが、同一オリジン ポリシーによって制限されます。拡張機能にはそのような制限はありません。拡張機能は、最初にクロスオリジン権限を要求すれば、オリジン外のリモート サーバーと通信できます。

おすすめ記事