2

我看到一个奇怪的问题,其中对 AWS S3 的 CORS 请求(特别是选项)间歇性地失败(约 1/3 次尝试)并出现 403 响应代码和以下错误消息:

跨域请求被阻止:同源策略不允许在 https://s3.amazonaws.com/some-bucket/some-video.mp4?uploads读取远程资源。(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。

S3 CORS 配置应该足够宽松,以允许使用相同的功能(包装 AWS -SDK 的 Bucket#upload) 可以正常工作。

有谁知道为什么会发生这种情况?我可以防止 SDK 使用意外的 Access-Control-Request-Method 标头吗?

更新:经过更多的挖掘,我得出的结论是,这是因为 OPTIONS 请求有时会使用Access-Control-Request-Method: POST标头而不是 default发送Access-Control-Request-Method: PUT。我的 CORS 配置中没有将 POST 列入白名单,这似乎就是这些请求失败的原因。

有谁知道为什么会发生这种情况?这是 SDK 中的错误吗?文档中的疏忽?文档*意味着将发布 PUT,因此我认为两者存在冲突。

*来自此方法的文档:

Bucket —(字符串)启动 PUT 操作的存储桶的名称。

Key —(字符串)为其启动 PUT 操作的对象键。

4

1 回答 1

1

这是文档中的错误。的描述upload()暗示与此相矛盾。

upload(params = {}, [options], [callback]) ⇒ AWS.S3.ManagedUpload

如果有效负载足够大,则使用对部分的智能并发处理上传任意大小的缓冲区、blob 或流。

S3 处理文件上传的“部分”的唯一方法是通过 multipart API,它是S3 REST APIPOST /...?uploads中的一个子资源请求,用于启动分段上传,这对于 > 5 GB 的对象是强制性的,并且在文件大小超过一些时推荐MB 数。多部分也是唯一可以重试部分失败的上传而不重新发送整个文件的机制。

您的 CORS 政策应该允许POST.

于 2018-02-14T12:22:29.827 回答