我是否需要在同一实例的webapp和webservice中进行HTTPS通信?

时间:2011-12-28 06:31:39

标签: java web-services http https

我在服务器实例上部署了一个Web服务。在同一个实例中,我们还有一个webapp,它使用这个Web服务,是最终用户的前端。

由于两者都在同一个服务器实例上并且通信是本地的,我想知道使用HTTPS是否会产生开销?

2 个答案:

答案 0 :(得分:3)

如果您的Web服务是“本地”的,即不是公共面对并绑定到环回接口(或更像是本地网络接口),使用HTTPS将是一个相当大的开销,没有正当理由(从那时起)它需要做“更多”的工作。)

我们有类似的架构,但我们使用RMI代替使用HTTP来获得更好的性能。它提供二进制传输而不是文本协议,更不用说免费提供的自动编组 - 解组。如果您担心可移植性,那么使用另一种有效的协议(如protobuffers)可能会对长远来说有所帮助。虽然我确信这些内容不适用于您的情况,因为您没有提及有关远离HTTP服务的任何内容。

答案 1 :(得分:1)

是的,在同一台服务器中,HTTPS只会增加开销。可以通过HTTP进行通信

如果Web服务服务器实例未向外界公开,则可以完全禁用HTTPS侦听器

如果此网络服务服务器向外界展示,则您可以编写一个过滤器,将来自外部的http请求重定向到https

过滤器的外观如下:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;        
    if(httpRequest.isSecure() || isHostAllowed(servletRequest.getRemoteHost()) ){
        filterChain.doFilter(servletRequest, servletResponse);
    } else{
        String url  = "https://"+servletRequest.getServerName() + "/" + httpRequest.getRequestURI();
        httpResponse.sendRedirect(url);
    }
}