395

cURL を使用して CORS リクエストをデバッグするにはどうすればよいですか? これまでのところ、プリフライト リクエストを「シミュレート」する方法が見つかりませんでした。

4

5 に答える 5

622

curl を使用して CORS リクエストをデバッグする方法は次のとおりです。

cUrl を使用して通常の CORS リクエストを送信する:

curl -H "Origin: http://example.com" --verbose \
  https://www.googleapis.com/discovery/v1/apis?fields=

-H "Origin: http://example.com"フラグは、リクエストを行っているサード パーティのドメインです。あなたのドメインが何であれ代用してください。

フラグは--verbose応答全体を出力するため、要求ヘッダーと応答ヘッダーを確認できます。

上記で使用している URL は、CORS をサポートする Google API へのサンプル リクエストですが、テストしている任意の URL に置き換えることができます。

応答にはAccess-Control-Allow-Originヘッダーが含まれている必要があります。

cUrl を使用してプリフライト リクエストを送信する:

curl -H "Origin: http://example.com" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS --verbose \
  https://www.googleapis.com/discovery/v1/apis?fields=

これは通常の CORS リクエストに似ていますが、いくつか追加されています。

-Hフラグは追加のプリフライト リクエスト ヘッダーをサーバーに送信します

-X OPTIONSフラグは、これが HTTP OPTIONS 要求であることを示します。

プリフライト リクエストが成功した場合、レスポンスには、、、およびレスポンス ヘッダーがAccess-Control-Allow-Origin含まAccess-Control-Allow-MethodsAccess-Control-Allow-Headersます。プリフライト リクエストが成功しなかった場合、これらのヘッダーは表示されないか、HTTP レスポンスが 200 になりません。

フラグUser-Agentを使用して、 などの追加のヘッダーを指定することもできます。-H

于 2012-08-29T13:42:42.270 に答える
88

ほとんどのケースをカバーする更新された回答

curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/
  1. http://www.example.com/をテストする URL に置き換えます。
  2. 応答に含まれるAccess-Control-Allow-*場合、リソースは CORS をサポートします。

代替回答の根拠

私は時々この質問をグーグルで検索しますが、受け入れられた答えは私が必要とするものではありません。最初に、大量のテキストである応答本文を出力します。--head出力のみのヘッダーを追加します。次に、S3 URL をテストするときは、追加のヘッダーを提供する必要があります-H "Access-Control-Request-Method: GET"

これが時間を節約することを願っています。

于 2017-12-02T16:22:14.203 に答える
6

これだけでうまくいくようです:

curl -I http://example.com

Access-Control-Allow-Origin: *返されたヘッダーを探します

于 2019-01-09T00:41:06.793 に答える
5

プリフライト リクエストは、OPTIONSHTTP メソッドを使用して行われます。

からへのPOSTリクエストでCORS をテストする場合、コマンドは次のようになります。http://mysite.example.comhttps://myapi.example.com/foo

curl -XOPTIONS \
  -H "Access-Control-Request-Method: POST" \
  -H "Origin: http://mysite.example.com" \
  https://myapi.example.com/foo

応答は、OKまたは のようなエラー メッセージですDisallowed CORS origin。必要に応じて、ヘッダーを含めることもでき-iます。

GETこれは、 または のいずれかHEADを要求し、ヘッダーの解釈を求める他の応答よりもはるかに単純です。

于 2021-07-26T15:12:27.933 に答える