javascript - AWS S3 - CORS 选项预检在使用 VersionId 删除期间抛出 400 错误请求

标签 javascript amazon-web-services amazon-s3 xmlhttprequest cors

我正在尝试使用对象的 Key 和删除标记的 VersionID 对删除标记发出删除对象请求。

由于 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 的 AWS 开发工具包 2.0.0-rc10

提前谢谢您。

编辑 1: 我尝试添加 <AllowedMethod>OPTIONS</AllowedMethod> 但亚马逊返回 Found unsupported HTTP method in CORS config. Unsupported method is OPTIONS

编辑 2:

选项请求/响应 header :

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 上。真是太棒了。

解决方案是将以下内容添加到您的相关<CORSRule>中AWS 中的配置:

<AllowedHeader>*</AllowedHeader>

这使得 Chrome 不会发送 OPTIONS 请求,并且一切都应该正常工作。

关于javascript - AWS S3 - CORS 选项预检在使用 VersionId 删除期间抛出 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186347/

相关文章:

amazon-web-services - 查询在 Amazon Athena 中创建的表时获取 HIVE_CURSOR_ERROR

javascript - 具有可扩展可折叠行 html 的 gridview

javascript - Location.href 调用了两次

amazon-web-services - 使用私钥和主机 IP 连接到 AWS EC2 实例

amazon-web-services - 如何找到我的 AWS S3 存储桶或文件夹的总大小?

ios - 在 Swift 中使用 iOS AWS SDK 检查 Amazon S3 文件的元数据

javascript - 如何使用来自外部链接 (Amazon S3) 的 SheetJS 解析 Excel 文件

javascript - 带有鼠标事件处理程序的 ImageButton 被认为格式不正确

javascript - 将 DOM 变量作为 props 传递给 Reactjs

html - 即使对于有效资源,AWS S3 也会间歇性地返回 403