2017-12-02 19 views
2

webpackを使用してdevサーバを実行すると、S3バケットにアイテムをリストし、ブラウザのjavascript aws-sdkを使用して結果をコンソールに表示しようとしています。aws-sdkは、実際に存在するcorsヘッダが見つからないと文句を言います。

そうするとき、私はこのエラーを取得:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://bucketname.s3.amazonaws.com/?list-type=2&max-keys=2. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

は、しかし、私はで実績のある、WebPACKのdevのサーバーの設定に設定されているヘッダーを持っている:

curl -I http://localhost:8080 

HTTP/1.1 200 OK 
X-Powered-By: Express 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS 
Access-Control-Allow-Headers: X-Requested-With, content-type, Authorization 
X-Content-Type-Options: nosniff 
Content-Type: text/html; charset=utf-8 
Content-Length: 7170 
Vary: Accept-Encoding 
Date: Sat, 02 Dec 2017 16:15:04 GMT 
Connection: keep-alive 

ので、私はすべてのものの上に*を試してみました

HTTP/1.1 404 Not Found 
X-Powered-By: Express 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: * 
Access-Control-Allow-Headers: * 

ヘッダーがあり、エラーが欠落していると思われる場合は、承認のようなものになる可能性がありますか?

実際にヘッダーが設定されている場合、ヘッダーが実際に存在する場合、次のステップは何ですか?

UPDATES ****

1:私は、ヘッダーのが不満をS3にはならないと考えているもののS3に設定CORSを追加する:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

またバケットが公開されていませんか、静的ホスティングが有効になっています。

2:これは働いた:マークされた答えによって与えられたURLから

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <AllowedHeader>*</AllowedHeader> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

+0

S3バケットのCORS設定が要求をブロックしていることを訴えています。あなたのdevサーバのCORS設定とは無関係です。以下の回答のリンクに従って、S3バケットにCORSを設定する必要があります。 –

+0

@マークB idは、そのエラーメッセージを正しく読む方法を学ぶことに興味があります。それの私の読書は全く異なっている。私はそれが明快さの必要性を持っていることに同意しない限り、将来私を助けるだろうと思う。 –

+0

これは、エラーメッセージの文言とはあまり関係がなく、CORSの仕組みをより深く理解しています。別のドメインでホストされているWebページに何かを含めると、ブラウザはドメインに到達して、(CORSヘッダーを確認して)自分のコンテンツをWebページに含めることができるかどうかを確認します。 CORSはブラウザに他のドメインをあなたのページに表示できるかどうかを知らせるのではなく、他のドメインがあなたのコンテンツを含むことができるかどうかについてブラウザに伝えています。したがって、サーバーのCORS設定は、あなたが持っていた問題とは無関係でした.S3で設定する必要がありました。 –

答えて

2

私はこれが助けることができる読書を願って:http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

は、どのようにそれは、XMLを使用している、あなたのCORSを設定してくださいファイル?

+0

S3でCORSを設定すると、デフォルトのものですが、私のサーバーが正しいヘッダーAccess-Control-Allow-Originを送信していないというエラーが表示されています。 –

1

S3バケット設定でCORSを設定します。 AWS管理コンソールにログインします。 S3バケットに行く。

<AllowedHeader>Authorization</AllowedHeader> 

Common Request Headers

基本的にあなたがCORSポリシーが書かれていた方法は、すべての要求ということです:右にあなたはオプション

1

はあなたの最初の例が機能しなかったことを理由に、これは一般的なリクエストヘッダのCORSさ見つけますAuthorizationヘッダーが必要です。例:

<AllowedHeader>*</AllowedHeader> 

How Does Amazon S3 Evaluate the CORS Configuration On a Bucket?

When Amazon S3 receives a preflight request from a browser, it evaluates the CORS configuration for the bucket and uses the first CORSRule rule that matches the incoming browser request to enable a cross-origin request. For a rule to match, the following conditions must be met:

  • 要求の原点ヘッダはAllowedOrigin要素と一致する必要があり:

    Authorization: AWS AWSAccessKeyId:Signature 
    

    溶液をに変更することです。

  • プリフライトOPTIONS要求の場合の要求メソッド(GETまたはPUTなど)またはAccess-Control-Request-MethodヘッダーはAllowedMethod要素の1つでなければなりません。
  • プリフライト要求の要求のAccess-Control-Request-Headersヘッダーに記載されているすべてのヘッダーはAllowedHeader要素と一致する必要があります。

Cross-Origin Resource Sharing (CORS)