

# CORS のテスト
<a name="testing-cors"></a>

CORS 設定をテストするために、CORS プリフライトリクエストを `OPTIONS` メソッドで送信して、リクエストの送信が許容できる場合にサーバーが応答できるようにします。Amazon S3 がブラウザからプリフライトリクエストを受け取ると、S3 はバケットの CORS 設定を評価し、受信ブラウザリクエストに一致する最初の `CORSRule` ルールを使用して、クロスオリジンリクエストを有効にします。ルールが一致するには、次の条件を満たしている必要があります。
+ バケットへの CORS リクエストの `Origin` ヘッダーは、CORS 設定の `AllowedOrigins` エレメントのオリジンと一致している必要があります。
+ バケットへの CORS リクエストの `Access-Control-Request-Method` で指定されている HTTP メソッドは、CORS 設定の `AllowedMethods` エレメントに含まれているメソッドと一致している必要があります。
+ プリフライトリクエストの `Access-Control-Request-Headers` ヘッダーに含まれているヘッダーは、CORS 設定の `AllowedHeaders` エレメントのヘッダーと一致している必要があります。

CORS 設定の例を次に示します。CORS 設定を作成するには、「[CORS の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)」を参照してください。CORS 設定の例については、「[CORS 設定のエレメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html)」を参照してください。

CORS ルールの設定とトラブルシューティングのガイダンスについては、AWS re:Post ナレッジセンターの「[Amazon S3 で CORS を設定し、cURL を使用して CORS ルールを確認する方法](https://repost.aws/knowledge-center/s3-configure-cors)」を参照してください。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "Authorization"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders":  [
             "x-amz-meta-custom-header"
        ]
    
    }
]
```

------

CORS 設定をテストするには、次の CURL コマンドを使用してプリフライト `OPTIONS` チェックを送信できます。CURL は、S3 とのやり取りに使用できるコマンドラインツールです。詳細については、「[CURL](https://curl.se/)」を参照してください。

```
 curl -v -X OPTIONS \
  -H "Origin: http://www.example1.com" \
  -H "Access-Control-Request-Method: PUT" \
  -H "Access-Control-Request-Headers: Authorization" \
  -H "Access-Control-Expose-Headers: x-amz-meta-custom-header"\
     "http://bucket_name.s3.amazonaws.com/object_prefix_name"
```

上記の例では、`curl -v -x OPTIONS` コマンドを使用してプリフライトリクエストを S3 に送信し、S3 がクロスオリジン `http://www.example1.com` からオブジェクトに `PUT` リクエストを送信することを許可しているかどうかを問い合わせます。ヘッダー `Access-Control-Request-Headers` と `Access-Control-Expose-Headers` はオプションです。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Request-Method` ヘッダーに応答して、Amazon S3 は、リクエストされたメソッドが一致する場合に、許可されたメソッドのリストを返します。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Request-Headers` ヘッダーに応答して、Amazon S3 は、リクエストされたヘッダーが一致する場合に、許可されたヘッダーのリストを返します。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Expose-Headers` ヘッダーに応答して、Amazon S3 は、リクエストされたヘッダーがブラウザで実行されているスクリプトによってアクセスできるヘッダーと一致する場合に、許可されたヘッダーのリストを返します。

**注記**  
プリフライトリクエストを送信するときに、いずれかの CORS リクエストヘッダーが許可されていない場合、レスポンス CORS ヘッダーは返されません。

このプリフライト `OPTIONS` リクエストに応答して、`200 OK` レスポンスを受け取ります。CORS のテスト時に受信される一般的なエラーコードと、CORS 関連の問題を解決するための詳細については、「[CORS のトラブルシューティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html)」を参照してください。

```
< HTTP/1.1 200 OK
< Date: Fri, 12 Jul 2024 00:23:51 GMT
< Access-Control-Allow-Origin: http://www.example1.com
< Access-Control-Allow-Methods: GET, PUT, POST, DELETE 
< Access-Control-Allow-Headers: Authorization
< Access-Control-Expose-Headers: x-amz-meta-custom-header
< Access-Control-Allow-Credentials: true
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
< Server: AmazonS3
< Content-Length: 0
```