方法 String domain = request.getRemoteHost();
返回 0:0:0:0:0:0:0:1
IPv6地址 . LAN卡配置为支持IPv6协议,Firefox也是如此: network.dns.disableIPv6 false
,并且安装了Java 1.8.0_141-b15 64位 . 但是如果我输入 http://0:0:0:0:0:0:0:1
它会显示错误或在Google上显示结果(??) . 如果我输入 localhost
或 127.0.0.1
,它会显示我项目的网页 . 怎么修好?我的目标不是禁用IPv6,而是支持IPv4和IPv6协议 .
建议的解决方案是添加括号: http://[0:0:0:0:0:0:0:1]
. 它正在发挥作用 . 但现在我们必须手动添加括号,并且只有协议是IPv6 . 也许应该更新 getRemoteHost()
以更好地支持IPv6?
我在网络资源标识符_2541374中找到了有关文字IPv6地址的信息:
IPv6地址中的冒号(:)字符可能与已 Build 的资源标识符语法冲突,例如URI和URL . 传统上,冒号一直用于在端口号之前终止主机路径 . [8]为了缓解这种冲突,文字IPv6地址用方括号括在这些资源标识符中,例如:http:// [2001:db8:85a3:8d3:1319:8a2e:370:7348] /
当URL还包含端口号时,符号为:https:// [2001:db8:85a3:8d3:1319:8a2e:370:7348]:443 /
所以看来Java问题......?现在正在研究IPv6正则表达式..
2 回答
如果您向Java询问主机名,您将获得主机名,而不是URI片段 . 没有什么不妥 . 如果你真的想要一个URI,你应该要求一个URI:
将打印
但是,如果您手动构造URI字符串,则在必要时添加括号将是您的责任 .
找到一个简单的解决方
但是有一个方法
getRemoteHost(true | false)
来获取带有括号的IPv6地址是非常好的 .