首页 > 解决方案 > 尝试上传到使用多个元数据生成的 GCP 签名 URL 时出现 403

问题描述

我生成了一个 GCP 签名的 url,在标头中有两个元数据值。

例如,'x-goog-meta-reviewer':'jane', 'x-goog-meta-author':'jack'</p>

当我尝试使用标头中设置的元数据将文件上传到生成的签名 URL 时。我收到 403 禁止请求。

但有趣的是,如果我只在两个标题中设置一个元数据 'x-goog-meta-reviewer':'jane' ,相同的代码也可以正常工作。

尝试将文件上传到 Google 云时,我们不能发送两个元数据值吗?

标签: javascriptnode.jsgoogle-cloud-platformgoogle-cloud-storage

解决方案


当您构建规范请求时,您应该记住以下规范标头:

1.使所有标题名称小写。

2.使用按代码点值的字典排序,按标题名称对所有标题进行排序。

3. 用换行符 (/n) 分隔每个标题。

4.通过使用逗号分隔的值列表创建一个标题名称来消除重复的标题名称。确保值之间没有空格,并确保逗号分隔列表的顺序与请求中标头出现的顺序相匹配。有关详细信息,请参阅 RFC 7230 第 3.2 节。

5.用一个空格替换任何折叠空格或换行符(CRLF 或 LF)。有关折叠空格的更多信息,请参阅 RFC 7230,第 3.2.4 节。

6.删除标题名称后出现的冒号周围的任何空格。

7.例如使用自定义header x-goog-acl:private 不去掉冒号后的空格会返回403 Forbidden错误,因为你计算的请求签名与谷歌计算的签名不匹配。

因此,当您计算的请求签名与 Google 计算的签名不匹配时,您可能会收到 403 Forbidden 错误。


推荐阅读