firebase - 为什么我的 Cloud Storage 的 URL 中的斜杠需要编码为 %2F?
问题描述
我的 Firebase Cloud Storage 的以下文件夹中存储了一个文件:
/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
?
解决方案
该字符/
用作 URL 中各个元素的路径分隔符,并%2F
转换为/
, 然后用作 URI 中的分隔符。
与问题相关:% 符号始终表示编码字符,只需对任何被认为不安全的字符进行编码,就可以使 URI 变得“更安全”,同时保留已编码的字符仍然编码[1]。
谈到 Firebase,谷歌文档说:/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
推荐阅读
- java - 如何在 JavaFX 的文本字段中禁用空格键?
- go - 在第一个空白字符之后,Go 构建未选择 CXX 环境变量
- java - 这个 lambda 表达式中的 imageProxy 参数是如何定义的?
- flutter - 如何使用 Radius CustomPainter 像这个样机一样创建弧
- javascript - Onclick 按钮只能工作一次。div 滑块 scrollIntoView
- mysql - 用于更改工作台中存在的所有模式的 SQL 查询?
- javascript - 分页在php网页中的page2上不起作用
- haskell - 字符串加倍?
- python - 用于命名字符串常量的 Python 构造
- python - 通过python合并两个外部边缘