google-cloud-platform - 包含“#”的 Google 负载均衡器映射 url
问题描述
我有一个使用 GCP 负载平衡器和 GCP 存储作为后端服务配置的网站。
现在是什么:
https://example.com/#/ --> works
https://example.com/#/path --> works
我想要的是:
https://example.com/#/ 但在后端它应该点击/#/path。
我尝试过使用 GCP 路径映射,host and path rules
但符号#
导致问题。它在浏览器中转换#
为%23
并说key not found
。
任何的想法?
解决方案
在 URL/URI 中,符号哈希 (#) 具有特殊含义,它是用作通用分隔符1的保留字符,就像正斜杠 (/) 或 at (@) 一样。实际上,井号被解释为 URL 中的锚点,因此它应该指向文档中的锚定部分。一个例子是:
http://example.com/your_page.html#my_document
它会将 URL 直接链接my_document
到your_page.html
.
因此,如果您使用与此不同的散列字符,则出于安全原因将对 URL 映射进行编码。如 RFC1738 2中所述:字符“#”是不安全的,应始终进行编码,因为它在万维网和其他系统中用于将 URL 与可能跟随它的片段/锚标识符分隔开。
因此,您的 URL 字符串正在由浏览器机制进行编码。更多信息在这里3。
尽管可以使用井号设置 URL 映射,但不建议这样做。因此,我鼓励您不要在 URL 映射中使用井号。
正如您提到的那样,它起作用的原因仅仅是因为哈希符号“#”在未编码时已被您的 Web 应用程序忽略。所以它可以像 for /#/path
or一样工作/#/#/#/path
。但实际上它只是在解释/path
.
推荐阅读
- amazon-web-services - AWS s3跨账户策略,确保所有账户都能读取
- reactjs - 从 rxjs 可观察订阅触发反应组件渲染(跳过初始渲染)
- mysql - Joomla 3.x 具有名称标题、别名和排序的字段在自定义组件中给出错误
- php - 使用 Select 过滤数据(高级)
- javascript - 当我通过断点或通过 console.warn 打印时,类的属性显示不同
- windows - 直接安装 Windows 10 时未检测到 MacBook Pro 触控栏(无训练营辅助)
- z3 - 如何更改 z3 函数的标准行为?
- php - 重定向到很多后显示空白页
- powershell - Convertfrom-string 删除前导零
- java - 计数器重置在 Java 中不起作用