dram.me

WSL中Java服务对127.0.1和localhost的不同处理

问题起因是发现OFBiz在WSL环境中无法以127.0.0.1地址访问,但使用localhost访问是正常的。后来进一步排查发现Tomcat的服务存在一样的问题,再进而发现直接以com.sun.net.httpserver.HttpServer启动的服务也是如此。

经过排查,更深层的原因是IPv4和IPv6的问题,运行于WSL中的未指定监听地址的Java服务,只接受IPv6的请求。比如在浏览器中请求http://[::1]:8000/是可以访问的。

这涉及到Java对IPv4和IPv6的处理,以及Windows的协议栈实现,以及WSL对Linux内核接口的实现。

这里有对Java的相关讨论,以及这里对WSL的讨论,可以作为参考。

问题的根因还需要进一步深入分析,另外操作系统在解析localhost域名时,如何选择IPv4还是IPv6呢?这也是一个待分析的问题。