正如@Greg Sansom所说,URL不应与锚点/片段一起发送。URL的片段部分与服务器无关。
这是HTTP
1.1规范相关部分的预期URL语法:
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
注意:
fragment语法中没有任何内容。
如果确实发送
fragment明文,将会发生什么事,具体取决于服务器实现。我希望您会看到各种各样的回复:
- 一些服务器将静默剥离/忽略片段部分。(这是您期望发生的事情)。
- 某些服务器可能将此视为请求错误,并以400响应。
- 某些服务器可能会错误地将该片段视为路径或查询的一部分,并根据该片段使服务器变得“混乱”的方式给出404或其他响应。
- 某些服务器可能实际上使片段具有特定含义。(这让我感到很愚蠢,但是你永远都不知道…)
IMO,最明智的解决方案是在实例化
HttpGet对象之前将其从URL中剥离。
跟进
从URL字符串中删除片段的推荐方法是将其转换为
java.net.URLor
java.net.URI实例,提取相关组件,使用这些组件创建新的
java.net.URLor
java.net.URI实例(当然不包含片段),最后将其重新转换为String 。
但是,我认为,如果可以安全地假定您的URL都是有效的绝对HTTP或HTTPS URL,则以下内容也应适用。
int pos = url.indexOf("#"); String strippedUrl = (pos >= 0) ? url.substring(0, pos) : url;


