web-dev-qa-db-ja.com

Chrome consoleでPostmanツール/ cURL /を使用してCORSをテストする

PostmanツールでCORSをテストしていますが、常に

access-control-allow-Origin → null

GETまたはOPTIONS要求

http://localhost:4000/api/accounts?Host=http://localhost:4200/&X-Origin=http://jquery.com

また、X-Originの代わりにOriginを使用しても、結果は変わりません。一方、このようなcURLを使用すると

 curl -H "Origin: http://jquery.com" --verbose http://localhost:4000/api/accounts

APIにアクセスできます

< access-control-allow-Origin: http://jquery.com

このコードを実行するために、httpとchrome Javascriptコンソールを使用してjQuery Webサイトを開きました。

$.get("http://localhost:4000/api/accounts").then(function(val){console.log(val);})

そして、APIによって返されたJSONオブジェクトを出力しました。

今、私の質問は次のとおりです。

  1. Postmanを使用してCORSを適切にテストするにはどうすればよいですか?サーバーのオリジンの許可オプションを*に設定すると、Postmanは

    access-control-allow-Origin → *

上記の問題は、次のような一連の生成元を明示的に許可した場合にのみ発生します。

`Origin: ["https://www.getpostman.com/", "http://localhost:4200/", "http://jquery.com"]`
  1. http://jquery.com/の代わりにhttp://jquery.comを許可すると、OriginがOrigin=http://jquery.comである要求は許可されないことに気付きました。
  2. リクエストが許可されていないOriginから来た場合でも、cURLはリソース(この場合はJSONデータ)のコンテンツを返すことに気付きました。これは正常ですか、またはこのデータを公開するサーバー上で何かを構成するのを忘れたことを意味しますか?
7
user3790827

クライアントから送信されるOriginヘッダーは、要求の発信元であるスキーム、ドメイン、およびポート(80でない場合)です。末尾の/はヘッダーでは無効です。複数のオリジンを送信することもできません。 Access-Control-Allow-Originサーバーから送信される*、すべてのオリジンを許可するか、リクエストヘッダーから同じオリジンを送り返します。

たとえば、http://www.telerik.com/ Chromeでは、リクエストヘッダーにOrigin:http://www.telerik.com(ブラウザはこれを自動的に送信します)、サーバーからの応答ヘッダーにはAccess-Control-Allow-Origin:http://www.telerik.com

最後の質問に関しては、仕様によると、ユーザーエージェントはCORSを実施する責任があるため、cURLは要求と応答が一致することを検証しないと思われます。

ユーザーエージェントは、要求の発信元の値と発信元が一致することを検証します。

出典:https://www.w3.org/TR/cors/

7
Gideon Pyzer

あなたが試すことができます

curl -Xオプション ' https://domain/path/file.png ' -H "Origin: https:// yoursitedomain " -H "Access-Control-Request -メソッド:GET "-v -o/dev/null

2