【问题标题】:Why the slashes in the URL of my Cloud Storage need to be encoded as %2F?为什么我的 Cloud Storage 的 URL 中的斜杠需要编码为 %2F?
【发布时间】:2021-06-19 23:58:45
【问题描述】:

我的 Firebase 云存储的以下文件夹中存储了一个文件:

/logs/2021/03/2021-03-22.json

我正在尝试通过下载 URL 访问它。

这不起作用:

https://firebasestorage.googleapis.com/v0/b/PROJECT_ID.appspot.com/o/logs/2021/03/2021-03-22.json?alt=media

当我尝试使用上述 URL 打开文件时出现此错误:

{
  "error": {
    "code": 400,
    "message": "Invalid HTTP method/URL pair."
  }
}

但以下 URL 可以正常工作(当文件夹路径中的斜杠编码为 %2F 时),并且我按预期获得了文件的内容。

https://firebasestorage.googleapis.com/v0/b/PROJECT_ID.appspot.com/o/logs%2F2021%2F03%2F2021-03-22.json?alt=media

这是为什么呢?我是否总是需要将存储桶文件夹级别的斜杠编码为 %2F

【问题讨论】:

  • 不熟悉 firebase 存储,但是否有可能从“logs...”开始的部分被解释为对象/文件名?因为如果我想在 URL 中用斜杠编码路径,我会这样做。
  • URL 中的斜杠通常被解释为 URL 路径补充分隔符。服务器不这样做是不寻常的,甚至可能违反 RFC 标准。由于您需要将文件解释为单个组件,因此您必须对其进行 URL 编码。此要求并非 Firebase 特有的,并且适用于斜杠以外的“不安全”字符。无论您使用哪种语言,都可能为您进行 URL 编码。
  • 这两个 cmets 都是伟大答案的开始。 ??? :)

标签: firebase google-cloud-storage firebase-storage


【解决方案1】:

字符 / 用作 URL 各个元素的路径分隔符,%2F 转换为 /,然后用作 URI 中的分隔符。

与问题相关:% 符号始终表示编码字符,只需对任何被认为不安全的字符进行编码,URI 就可以变得“更安全”,同时保留已编码的字符仍然编码 [1] .

谈到 Firebase,Google 文档说:/logs/ 后面的日志名称部分必须是 URL 编码的。这意味着正斜杠字符 / 必须写为 %2F [2]。

[1]https://www.w3.org/Addressing/URL/4_URI_Recommentations.html

[2]https://firebase.google.com/support/guides/cloud-audit-logging/firebase-management

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2017-05-07
    • 2010-11-30
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多