Нужна ли мне связь HTTPS в веб-приложении и веб-сервисе в одном и том же экземпляре? - PullRequest
2 голосов
/ 28 декабря 2011

У меня развернут веб-сервис на экземпляре сервера. В том же случае у нас также есть веб-приложение, которое использует этот веб-сервис и является интерфейсом для конечного пользователя.

Поскольку оба находятся на одном и том же экземпляре сервера, а связь локальная, мне было интересно, будет ли использование HTTPS накладными расходами?

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Если ваш веб-сервис является «локальным» по отношению к устройству, т. Е. Не является общедоступным и связан с интерфейсом обратной связи (или, скорее, с интерфейсом локальной сети), использование HTTPS будет значительным расходом без объяснения причин по понятным причинам (поскольку это должно сделать "больше" работы).

У нас похожая архитектура, но вместо HTTP мы используем RMI для повышения производительности. Он обеспечивает двоичную передачу в отличие от текстового протокола, не говоря уже об автоматическом маршаллинге-демаршаллинге, который предоставляется бесплатно. Если вы беспокоитесь о переносимости, использование другого эффективного протокола, такого как протобуферы, может помочь в долгосрочной перспективе. Хотя я уверен, что эти вещи не применимы в вашем случае, учитывая, что вы ничего не упоминаете о переходе от службы HTTP.

1 голос
/ 28 декабря 2011

Да, на том же сервере HTTPS просто добавляет издержки .Может связываться по HTTP

Если экземпляр сервера веб-службы не открыт для внешнего мира , вы можете полностью отключить прослушиватель 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...