オブジェクトのキーと削除マーカーのVersionIDを使用して、削除マーカーのdeleteObjectリクエストを試みています。
CORSが原因で、ブラウザ(Chrome 34.0.1847.11)はOPTIONSプリフライト要求をhttp://bucket.s3-us-west-2.amazonaws.com/Folder/に送信します。 File.ext?versionId = 0123456789
Amazon S3は、次のXML本文で400(不正なリクエスト)で応答します。
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidArgument</Code>
<Message>This operation does not accept a version-id.</Message>
<ArgumentValue>0123456789</ArgumentValue>
<ArgumentName>versionId</ArgumentName>
<RequestId>12345</RequestId>
<HostId>1122334455</HostId>
</Error>
XMLHttpRequestは400(不正なリクエスト)を返すため、DELETEリクエストは実行されません。 AWSがオプションリクエストを正しく処理していないように見えます。回避策がある場合、それは素晴らしいことです!
バケットの現在のCORSポリシーは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
参考:JS 2.0.0-rc10のAWS SDKを使用しています
前もって感謝します。
EDIT 1:<AllowedMethod>OPTIONS</AllowedMethod>
を追加しようとしましたが、AmazonはFound unsupported HTTP method in CORS config. Unsupported method is OPTIONS
を返します
編集2:
OPTIONSリクエスト/レスポンスヘッダー:
Remote Address: *********:443
Request URL: https://bucket.s3-us-west-2.amazonaws.com/path/to/file_name?versionId=0123456789
Request Method: OPTIONS
Status Code: 400 Bad Request
Request Headers
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Access-Control-Request-Headers: x-amz-user-agent, x-amz-security-token, x-amz-date, authorization, content-type
Access-Control-Request-Method: DELETE
Cache-Control: no-cache
Connection: keep-alive
DNT: 1
Host: bucket.s3-us-west-2.amazonaws.com
Origin: https://website.com
Pragma: no-cache
Referer: https://website.com/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.60 Safari/537.36
Query String Parameters
versionId: 0123456789
Response Headers
Access-Control-Allow-Headers: x-amz-user-agent, x-amz-security-token, x-amz-date, authorization, content-type
Access-Control-Allow-Methods: HEAD, GET, PUT, POST, DELETE
Access-Control-Allow-Origin: *
Connection: close
Content-Type: application/xml
Date: Tue, 18 Mar 2014 23:59:15 GMT
Server: AmazonS3
Transfer-Encoding: chunked
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-id-2: *************************
x-amz-request-id: ***********
OPTIONSが失敗するため、削除要求が実際に発生することはありません。
私はこの問題に遭遇しました。 Chromeでのみ発生します。それはかなり素晴らしかった。
解決策は、AWSの関連する<CORSRule>
構成に以下を追加することです。
<AllowedHeader>*</AllowedHeader>
Chrome OPTIONSリクエストを送信しないため、すべてが適切に機能するはずです。