Javascript AWS S3-CORS选项飞行前在删除过程中抛出400个错误请求w/VersionId

Javascript AWS S3-CORS选项飞行前在删除过程中抛出400个错误请求w/VersionId,javascript,amazon-web-services,amazon-s3,xmlhttprequest,cors,Javascript,Amazon Web Services,Amazon S3,Xmlhttprequest,Cors,我正在尝试使用对象的键和删除标记的VersionID请求删除标记 由于使用CORS,浏览器(Chrome 34.0.1847.11)会向以下用户发送选项飞行前请求: Amazon S3以400(错误请求)响应,并使用以下XML正文: <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>InvalidArgument</Code> <Message>This oper

我正在尝试使用对象的键和删除标记的VersionID请求删除标记

由于使用CORS,浏览器(Chrome 34.0.1847.11)会向以下用户发送选项飞行前请求:

Amazon S3以400(错误请求)响应,并使用以下XML正文:

<?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(错误请求),所以永远不会执行删除请求。我的印象是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>

删除请求从未真正发生过,因为选项失败。

我刚刚遇到了这个问题。它只发生在铬上。真是太棒了

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

<AllowedHeader>*</AllowedHeader>
*

这使得Chrome无法发送选项请求,所有内容都应该正常工作。

请包含选项和删除请求的所有HTTP请求和响应头。顺便说一下,我听说过为DELETE方法传递参数的问题。为了以防万一,请尝试
选项
:)@Adam-请参见编辑1和编辑2。请注意,库/浏览器实际上从未调用DELETE,因为选项pre-flight失败。在飞行前选项中没有versionId GET参数的正常删除可以很好地工作。尝试在请求正文(如POST)中传递versionId参数,而不是查询字符串。这样它就不会被CORS规则检查,这并不意味着它会工作。您还可以使用网络嗅探器(有时浏览器会撒谎)在较低级别上检查流量。@Adam-我自己不生成任何请求,我相信浏览器会在您执行由于CORS而导致的删除请求时自动生成选项请求。我正在使用亚马逊SDK。是的,选项请求是自动生成的,不能绕过。我假设SDK为您创建了删除请求,因此您没有太多的控制权,但您始终可以使用jQuery或纯XMLHttpRequest对象创建自定义请求。也可以尝试使用不同的浏览器。我还看到了非标准的
DNT
标题-尝试禁用“不跟踪”选项一段时间。作为注释,此配置是通过转到s3存储桶,单击
属性
权限
,以及
编辑CORS配置
设置的。我得到了206个部分内容。这没有帮助。我希望如此。显然,chrome和s3之间存在一些问题。这个答案充分解释了这一点,并给出了一些替代方案:@tmont我真的怀疑S3 bucket上的CORS规则是否会让Chrome停止发送选项请求,因为Chrome一开始并不知道这个规则,选项是飞行前的方法——根据我对机制的理解,它必须始终执行。
<AllowedHeader>*</AllowedHeader>