javascript - 尝试上传到使用多个元数据生成的 GCP 签名 URL 时出现 403
问题描述
我生成了一个 GCP 签名的 url,在标头中有两个元数据值。
例如,'x-goog-meta-reviewer':'jane', 'x-goog-meta-author':'jack'</p>
当我尝试使用标头中设置的元数据将文件上传到生成的签名 URL 时。我收到 403 禁止请求。
但有趣的是,如果我只在两个标题中设置一个元数据 'x-goog-meta-reviewer':'jane' ,相同的代码也可以正常工作。
尝试将文件上传到 Google 云时,我们不能发送两个元数据值吗?
解决方案
当您构建规范请求时,您应该记住以下规范标头:
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 错误。
推荐阅读
- apache-flink - 为什么在使用 ProcessingTime 时,只有在我输入第二个事件后,CEP 才打印第一个事件?
- batch-file - 如何将一个文本文件传输到另一个文件?
- database - Windows 窗体保存到数据集但不保存到表
- sql-server - 如何在 SQL Server 2016 中设计版本控制表
- javascript - 如何停止从 div 的 ID 重定向到父 URL
- node.js - 使用回调返回未定义的 Firestore onWrite 触发器
- c# - 如何将数据从 Chrome 浏览器控制台传输到 C# 文件
- javascript - Android上的嵌入式站点检查站点是否由应用程序或浏览器打开
- r - 尝试使用 dplyr 和 purrr 从另一个数据帧中的值生成数据帧
- python - Python 无效语法 为什么?c