0

ローカルホストのGoogleクラウドストレージからAJAX経由でファイルを取得しようとしています。Google Cloud Storageがアクセス制御元のヘッダーを無視しています

gsutilを介して、私のバケットのためのCORSを設定します:私は、次のように行っているcors.jsonファイルがある

gsutil cors set cors.json gs://my-project

:私はgsutil cors get gs://my-project

でそれを確認しました

[ 
    { 
    "origin": [ 
     "*" 
    ], 
    "responseHeader": ["Origin", "Accept", "X-Requested-With", "Authorization", "Content-Type",  "Content-Length", "Accept-Encoding", "X-CSRF-Token"], 
    "method": [ 
     "GET", 
     "OPTIONS" 
    ], 
    "maxAgeSeconds": 1 
    } 
] 

ファイルごとに、ファイルをアップロードするときにnode.jsクライアントライブラリからパブリックにしました。

コンソールから

bucket.file(object.name).makePublic()

、およびgsutilの通過:

gsutil -m acl set -R -a public-read gs://my-project

その後、私のAjaxリクエストで、私もヘッダーを送信:

$.ajax({ 
      method: "GET", 
      url: "https://googleapis.com/storage/v1/b/my-project/o?delimiter=audio", 
      headers: { 
       'Access-Control-Allow-Origin': '*' 
      }, 
      crossDomain: true, 
     }).done((data) => { 
      console.log(data) 
     }) 

と私はまだ取得コルスエラー:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:3000 ' is therefore not allowed access.

CORSを取得するにはどうすればよいですか?

答えて

1

"www.googleapis.com"の代わりに "googleapis.com"を使用しています。 "www"を追加するとコードが機能します。

認証を行っていないようですので、バケットで匿名ユーザーがオブジェクトをリストできるようにする必要があります(gsutil acl ch -g allUsers:R gs://bucket-nameで設定されています)。

次に、匿名リクエストの場合は、リクエストをGoogle Cloudプロジェクトに関連付けるAPIキーパラメータを追加することをおすすめします。 GCSは完全に匿名の要求を許可しますが、あまりにも頻繁になるとブロックされる可能性があります。

最後に、バケット上のCORSポリシーは、XML APIによってのみ尊重されます。エンドポイントが「www.googleapis.com」のJSON APIは、バケット上に特別なプロパティを設定する必要はなく、クロスソースリクエストにうれしく反応します。

+0

非常に参考になった回答 - ありがとうございました! – mheavers

+0

エンドポイントのフォーマットは次のとおりです:「storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]」は、「www.storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]」に変更するという意味ですか? – KevinHu

+0

storage.googleapis.com/BUCKET/OBJECTは問題ありません。 –

関連する問題