java400错误码_java-HttpClient与锚链接的400错误

正如@Greg Sansom所说,URL不应与锚点/片段一起发送. URL的片段部分与服务器无关.

以下是HTTP 1.1规范的relevant part中的预期URL语法:

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

注意:语法中没有片段部分.

如果您确实发送片段,会发生什么事,这取决于服务器的实现.我希望您会看到各种各样的答复:

>有些服务器会静默剥离/忽略片段部分. (这是您期望发生的事情).

>某些服务器可能将此视为请求错误,并以400响应.

>某些服务器可能会错误地将片段视为路径或查询的一部分,并根据片段对服务器的“混淆”程度,给出404或其他响应.

>有些服务器可能实际上使片段具有特定含义. (这让我感到很愚蠢,但是你永远都不知道…)

IMO,最明智的解决方案是在实例化HttpGet对象之前将其从URL中剥离.

跟进

从URL字符串中删除片段的推荐方法是将其变成java.net.URL或java.net.URI实例,提取相关组件,使用这些组件创建新的java.net.URL或java.net .URI实例(当然省去了片段),最后将其转换回字符串.

但是,我认为,如果可以安全地假定您的URL都是有效的绝对HTTP或HTTPS URL,则以下内容也应适用.

int pos = url.indexOf("#");

String strippedUrl = (pos >= 0) ? url.substring(0, pos) : url;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值