Repository navigation
Description
The ServletServerHttpRequest getLocalAddress and getRemoteAddress methods contain additional DNS queries. The servletRequest.getLocalName() method requests a hostname from an IP address, and the InetSocketAddress constructor calls InetAddress.getByName, which requests an IP address from a hostname.
It looks like these requests can be omitted if you use servletRequest.getLocalAddr() and servletRequest.getRemoteAddr() instead of get*Name() methods.
If DNS is not properly configured on the server, then the establishment of a websocket connection hangs (for a few seconds).
Problematic stack trace:
at java.net.Inet4AddressImpl.getHostByAddr(Native Method)
at java.net.InetAddress$2.getHostByAddr(InetAddress.java:933)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:618)
at java.net.InetAddress.getHostName(InetAddress.java:560)
at java.net.InetAddress.getHostName(InetAddress.java:532)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.populateLocalName(NioEndpoint.java:1506)
at org.apache.tomcat.util.net.SocketWrapperBase.getLocalName(SocketWrapperBase.java:277)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:478)
at org.apache.coyote.Request.action(Request.java:517)
at org.apache.catalina.connector.Request.getLocalName(Request.java:1357)
at org.apache.catalina.connector.RequestFacade.getLocalName(RequestFacade.java:1002)
at org.springframework.http.server.ServletServerHttpRequest.getLocalAddress(ServletServerHttpRequest.java:200)
at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.upgrade(AbstractStandardUpgradeStrategy.java:116)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.doHandshake(AbstractHandshakeHandler.java:297)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:178)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
The impression is that these addresses are not even used by Spring, but are only needed to ensure the operation of the WebSocketSession methods getLocalAddress() and getRemoteAddress(), and we don't use these methods at all.
Activity
ud1 commentedon Apr 4, 2022
There are two classes named
ServletServerHttpRequest, first oneorg.springframework.http.server.ServletServerHttpRequestand the secondorg.springframework.http.server.reactive.ServletServerHttpRequest.The
reactive.ServletServerHttpRequest getLocalAddressmethod already usesgetLocalAddr()method.Consistent use of getLocalAddr() without DNS lookups in request adapters
Consistent use of getLocalAddr() without DNS lookups in request adapters
lrgrz commentedon Sep 19, 2022
I'm afraid the issue is not resolved.
The AbstractStandardUpgradeStrategy still tries to get InetSocketAddresses during upgrade:
and ServerHttpRequest uses constructor of InetSocketAddress, which performs DNS lookup:
(checked on spring 5.3.20 and java 17)
sbrannen commentedon Sep 20, 2022
@lrgrz, this issue was closed back in April.
If you think you have discovered a bug or regression, please create a new issue to address that.
Thanks
slovdahl commentedon Oct 9, 2025
@lrgrz is #35589 the same as you reported?