【问题标题】:Google Load Balancer map url containing has '#'包含“#”的 Google 负载均衡器映射 url
【发布时间】:2020-08-27 19:09:51
【问题描述】:
我有一个使用 GCP 负载平衡器和 GCP 存储作为后端服务配置的网站。
现在是什么:
https://example.com/#/ --> works
https://example.com/#/path --> works
我想要什么:
https://example.com/#/ 但在后端它应该点击/#/path。
我曾尝试使用 host and path rules 进行 GCP 路径映射,但符号 # 会导致问题。它在浏览器中将# 转换为%23 并显示key not found。
有什么想法吗?
【问题讨论】:
标签:
google-cloud-platform
google-cloud-storage
google-cloud-load-balancer
【解决方案1】:
在 URL/URI 中,符号哈希 (#) 具有特殊含义,它是用作通用分隔符 1 的保留字符,就像正斜杠 (/) 或 at (@) 一样。
实际上,井号被解释为 URL 中的锚点,因此它应该指向文档中的锚点部分。一个例子是:
http://example.com/your_page.html#my_document
它将直接链接到your_page.html 中的my_document 锚点处的URL。
因此,如果您使用的哈希字符与此不同,则出于安全原因,URL 映射将被编码。正如 RFC1738 2 中所述:字符“#”是不安全的,应始终进行编码,因为它在万维网和其他系统中用于将 URL 与可能跟随它的片段/锚标识符分隔。
因此,您的 URL 字符串正在由浏览器机制进行编码。
更多信息在这里3。
尽管可以使用井号设置 URL 映射,但不建议这样做。因此,我建议您不要在 URL 映射中使用井号。
正如您所提到的那样,它起作用的原因仅仅是因为井号“#”在未编码时已被您的 Web 应用程序忽略。
所以它可以像/#/path 或/#/#/#/path 一样工作。但实际上它只是解释/path。