簡體   English   中英

我是否需要在同一實例的Web應用程序和Web服務內進行HTTPS通信?

[英]Do I need HTTPS communication within a webapp and a webservice on the same instance?

我在服務器實例上部署了Web服務。 在同一實例上,我們還有一個使用該Web服務的Web應用程序,它是最終用戶的前端。

由於兩者都在同一服務器實例上並且通信是本地的,所以我想知道是否使用HTTPS會產生開銷?

如果您的Web服務是“本地”的,即不是面向公眾的,並且沒有綁定到環回接口(或更像是本地網絡接口),則使用HTTPS會產生可觀的開銷,並且出於顯而易見的原因(沒有必要)(因為它需要做“更多”的工作)。

我們有一個類似的體系結構,但不是使用HTTP,而是使用RMI以獲得更好的性能。 它提供了與文本協議相對的二進制傳輸,更不用說免費提供的自動編組-解組了。 如果您擔心可移植性,那么從長遠來看,使用其他有效協議(如protobuffers)可能會有所幫助。 盡管我確定這些事情在您的情況下不適用,因為您沒有提到任何脫離HTTP服務的內容。

是的,在同一服務器上,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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM