Firebase 为什么我的云存储URL中的斜杠需要编码为%2F?
我在Firebase云存储的以下文件夹中存储了一个文件:Firebase 为什么我的云存储URL中的斜杠需要编码为%2F?,firebase,google-cloud-storage,firebase-storage,Firebase,Google Cloud Storage,Firebase Storage,我在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": { "
/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
为什么呢?我是否总是需要将bucket文件夹级别的斜杠编码为
%2F
?字符/
用作URL各个元素的路径分隔符,%2F
转换为/
,然后用作URI中的分隔符
与此问题相关:%符号始终表示编码字符,仅通过对任何被认为不安全的字符进行编码,而将已编码的字符保持编码状态,URI就可以变得“更安全”[1]
谈到Firebase,Google文档说:/logs/后面的日志名部分必须是URL编码的。这意味着正斜杠字符/,必须写为%2F[2]
[1]
[2] 不熟悉firebase存储,但零件是否可能从“日志。。。是否解释为对象/文件名?因为如果我想在URL中用斜杠对路径进行编码,我会这样做。URL中的斜杠通常被解释为URL路径补充分隔符。如果服务器不这样做,这将是不寻常的,甚至可能违反RFC标准。因为您需要将文件解释为单个组件,所以必须对其进行URL编码。此要求不是Firebase特有的,适用于斜杠以外的“不安全”字符。无论您使用哪种语言,都可能为您进行URL编码。这两条评论都是伟大答案的开始。