Обработка подключения HTTP к HTTPS прокси - перенос кода с Netty на Armeria

У меня есть код, который в настоящее время работает в Netty, который действует как прокси-сервер HTTPS, поэтому мы обрабатываем CONNECT метод и добавить обработчик SSL в конвейер на лету:

// SimpleChannelInboundHandler<FullHttpRequest> 

@Override
protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) {
    if (HttpMethod.CONNECT.equals(msg.method())) { // HTTPS proxy
        SslContext sslContext = Utils.getSslContext();
        SslHandler sslHandler = sslContext.newHandler(ctx.alloc());
        FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, CONNECTION_ESTABLISHED);
        response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
        ctx.writeAndFlush(response).addListener(l -> ctx.channel().pipeline().addFirst(sslHandler));
        // do NOT close channel
        return;
    } else {
        // other stuff
    }

}

Я портирую все это на Armeria и хотел бы подсказать, как к этому подойти. У меня потоки без SSL работают нормально, используя что-то вроде этого:

// HttpService

@Override
public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception {
    return HttpResponse.from(req.aggregate().thenApply(ahr -> MyServer.handle(ahr)));
}

Любые советы будут оценены!

1 ответ

Решение

Armeria, к сожалению, не позволяет пользователю HttpService обрабатывать CONNECTметод. Просмотрите этот выпуск, чтобы получить уведомление, когда функция станет доступна.

Другие вопросы по тегам