【问题标题】:Do I need HTTPS communication within a webapp and a webservice on the same instance?我是否需要在同一实例上的 web 应用和 web 服务中进行 HTTPS 通信?
【发布时间】:2011-12-28 06:31:38
【问题描述】:

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

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

【问题讨论】:

    标签: java web-services http https


    【解决方案1】:

    如果您的 Web 服务对盒子来说是“本地的”,即不面向公众并绑定到环回接口(或更类似于本地网络接口),那么使用 HTTPS 将是一个相当大的开销,而且出于明显的原因(因为它需要做“更多”的工作)。

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

    【讨论】:

    • 谢谢!没错,桑杰,我们没有选择离开 HTTP 的选择,因为我们有各种只支持 HTTP 的客户端 :)
    【解决方案2】:

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

    如果 Web 服务服务器实例不对外暴露,您可以完全禁用 HTTPS 侦听器。

    如果此 Web 服务服务器暴露于外部世界,那么您可以编写一个过滤器,将来自外部的 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);
        }
    }
    

    【讨论】:

    • 它实际上暴露于外部世界。我认为我们需要找到一种方法,允许本地调用使用 HTTP,其他调用使用 HTTPS。
    • 你只需要从调用者那里发出http请求。就是这样。
    • 谢谢!好的,您的意思是我们必须编写一个实现javax.servlet.Filter 接口的过滤器,或者web.xml 中的<security-constraint> 标签可以配置为这样做吗?因为只有当它来自外部时我们才需要重定向到 HTTPS..
    • 我们需要编写实现javax.servlet.Filter的过滤器。它允许来自 HTTP 和来自本地机器的请求(可以使用 HttpServletRequest.getRemoteHost() 来识别)。否则,将请求重定向到 HTTPS 端口。
    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多