Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 为什么我的云存储URL中的斜杠需要编码为%2F?_Firebase_Google Cloud Storage_Firebase Storage - Fatal编程技术网

Firebase 为什么我的云存储URL中的斜杠需要编码为%2F?

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": { "

我在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

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

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

与此问题相关:%符号始终表示编码字符,仅通过对任何被认为不安全的字符进行编码,而将已编码的字符保持编码状态,URI就可以变得“更安全”[1]

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

[1]


[2]

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