首页 文章

amazon S3上传API对http post参数排序很敏感

提问于
浏览
0

我创建了一个存储桶,其中策略强制指定要上载的对象的内容类型 . 如果我在文件元素之后指定content-type,(例如下面的例子)

<form action="..">
...
<input type='file' name='file' />
<input name='content-type' value='image/jpeg' />
<input type='submit' />
</form>

它返回以下错误

<Error>
    <Code>AccessDenied</Code>
    <Message>Invalid according to Policy: Policy Condition failed: ["starts-with", "$Content-Type", ""]</Message>
    <RequestId>15063EB427B4A469</RequestId>
    <HostId>yEzAPF4Z2inaafhcqyQ4ooLVKdwnsrwqQhnYg6jm5hPQWSOLtPTuk0t9hn+zkBEbk+rP4S5Nfvs=</HostId>
</Error>

如果我在文件元素之前指定content-type,则上载按预期工作 . 我第一次遇到这种行为 . 我有几个问题 .

  • 它是某些规范的一部分,客户端和所有中间代理应该维护http post params的顺序吗?请指点我 .

  • 为什么要让您的API知道这样的排序?在这种特殊情况下,我可以猜测文件可能很大,除非您之前看到所有预期的参数,否则应立即返回失败 . 如果我的理解不正确,请纠正我 .

1 回答

  • 1

    It is part of the spec that the parts are sent as ordered in the form . 没有理由相信允许通过中间代理进行重新排序 .

    表单数据和边界(不包括文件内容)不能超过20K . ...文件或内容必须是表单中的最后一个字段 . http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTForms.html#sigv4-HTTPPOSTFormFields

    逻辑假设是这种设计允许S3尽早拒绝无效上传 .

相关问题