gpt4 book ai didi

java - Tomcat 8 将连字符转换为 URL 中的 %2D

转载 作者:行者123 更新时间:2023-11-28 22:07:49 24 4
gpt4 key购买 nike

如何防止 Tomcat 在 URL 中将连字符 (-) 编码为 %2D。当从 Safari 浏览器发出请求时,此行为会导致一些与 session 相关的问题。

部署的war文件:my-app.war

生成的url:/my%2Dapp

所需的网址:/my-app

最佳答案

如果您指的是 Tomcat Manger 生成的链接:您遇到的问题不是源于任何 Context 配置,而是源于 HTMLManagerServlet .此 servlet 包括以下 line :

 "<a href=\"" + URL_ENCODER.encode(contextPath + "/")

这是一个自定义编码器:org.apache.catalina.util.URLEncoder .代码中使用的静态实例不使用 DEFAULT将以下字符标记为安全的单例:

public static final URLEncoder DEFAULT = new URLEncoder();
static {
DEFAULT.addSafeCharacter('~');
DEFAULT.addSafeCharacter('-');
DEFAULT.addSafeCharacter('_');
DEFAULT.addSafeCharacter('.');
DEFAULT.addSafeCharacter('*');
DEFAULT.addSafeCharacter('/');
}

而是this :

static {
URL_ENCODER = new URLEncoder();
// '/' should not be encoded in context paths
URL_ENCODER.addSafeCharacter('/');
}

所以结果是除了 / 之外的每个字符都是使用 UTF-8 进行 URL 编码的。

关于java - Tomcat 8 将连字符转换为 URL 中的 %2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com