【问题标题】: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2021-12-07
      • 1970-01-01
      • 2022-01-23
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多