返回到集群环境中的 Servlet



我有一个简单的问题。我希望

httpServletResponse.setHeader(“Location”, httpServletRequest.getRequestURL().toString())

会回到自己身上。但是在我们的集群基础架构中,具有IIS和多个TOMCAT

httpServletRequest.getRequestURL() 

指向 IIS(群集管理器(。这是正确的行为,因为我不确定吗?重定向目前失败。 我确实知道我可以使用相对地址(并且有效(,但我只想知道观察到的行为(重定向失败(是否符合预期?

重定向向客户端(浏览器(发送响应,有效地要求浏览器发送全新的请求。

这样做的结果是,这条路线将从头开始。如果应用程序服务器前面有反向代理和负载平衡器,那么重定向可能会转到应用程序的不同实例(不同的集群成员(。

若要将请求发送到同一服务器上同一应用程序中的不同资源,请使用forward而不是发送重定向:

httpServletRequest.getRequestDispatcher(httpServletRequest.getContextPath())
.forward(request, response);

理论上,上面的代码会将请求发送到同一个 servlet 实例。

重定向目前失败。

失败的原因有很多。最有可能的是反向代理 (IIS( 正在使用本地网络地址与应用程序服务器通信(例如Host标头中的内部 IP 地址等(。您可能需要重定向到浏览器最初使用的主机名(如果域名已知,或者您可以以某种方式使反向代理转发Host标头(。某些反向代理/Web 服务器支持重写。

最新更新