【问题标题】:URL gets cut after the hashtag主题标签后 URL 被截断
【发布时间】:2020-08-14 05:02:41
【问题描述】:

我正在使用 Java (Maven)、Angular(8.3.20) 和 Tomcat 服务器

在 Java 中,我有一个用于 HttpServletResponse 的 sendRedirect,其 URL 包含标签。

例如:https://localhost:4200/api/hello#world

但是#(世界部分)后面的字符串不会出现在前端。

在控制台/网络中作为标题,我收到了https://localhost:4200/api/hello。所以#world 消失了。

我尝试将主题标签更改为编码值(它将返回 %23),但这也不起作用。

如何在主题标签发送到前端后获取该部分?所以从后端(带有磅/井号标签的 url)到前端。

【问题讨论】:

    标签: java angular tomcat redirect hashtag


    【解决方案1】:

    我找了这个问题,我找到的解决方法是将#编码为%23, 但它似乎不适用于所有浏览器(例如:IE、Safari),因此请尝试使用 google-chrome。

    更多信息: https://support.google.com/richmedia/answer/190941?hl=en

    【讨论】:

      【解决方案2】:

      路由策略

      HashLocationStrategy漏洞利用# 符号之后的任何内容都不会发送到服务器 - 这使得它非常适合用它来存储应用程序状态。

      为什么有用

      使用散列路由在子页面上重新加载页面(或通过书签重新访问)

      http://localhost:4200/#/articles/35

      不向服务器查询子页面,而是返回主应用程序页面。

      http://localhost:4200/

      这样服务器实现只需要知道根页面(这是唯一会被查询的东西)

      使用PathLocationStrategy(默认)需要设置服务器以处理应用程序实现的每个 URL 的请求。

      那么你能做的是:从路由文件中禁用HashLocationStrategy。或者您可以在不带 # 的情况下附加 url,然后将其发送到服务器并在服务器端处理 url。

      我遇到了同样的问题,我所做的是将#前面的部分添加为查询参数,以便服务器可以访问它。 例如。 (Https://localhost:4200/api/test?remainingDataFromHash=requiredData) 像这样

      【讨论】:

      • 我的问题是我必须将带有 # 的 url 从后端发送到前端。在前端,主题标签的部分被切断了..
      • 然后从哪里将 url 传递给后端?
      • 从前端但是当我这样做时,它不包含一个标签。主题标签仅从后端创建到前端
      • 应该不是这样,其实java中的一个方法httpRequest.getRequestURL()在#之前检索url。您必须仅使用 # 从前端发送 url。请您交叉确认一次。我很确定,因为我遇到了完全相同的问题。
      • 我不使用 httpRequest.getRequestURL() 方法。它是由@Context HttpServletRequest 请求传递的,在java 中是@Context HttpServletResponse 响应。因此可以在特定的@Path 上发布,创建一个带有 # 的 url 并返回一个 redirectURL
      猜你喜欢
      • 2014-09-13
      • 2018-04-20
      • 2021-11-18
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2019-03-24
      相关资源
      最近更新 更多