В vertx, есть ли способ, которым я могу просто изменить заголовок и перенаправить на другой сервер

#vert.x #vertx-httpclient

#vert.x #vertx-httpclient

Вопрос:

Я новичок в Vertx, я пишу прокси-сервер, который будет принимать запрос, обновлять заголовок и отправлять на другой сервер. При получении ответа отправьте полный ответ в том виде, в каком он есть, клиенту.

В vertx, есть ли способ, которым я могу это сделать, или мне нужно реализовать обработчик для каждого метода http и типа контента, чтобы создать новый запрос и отправить с использованием нового клиента?

Ответ №1:

Если вы используете vertx-web версию 3.x и ниже, то вы можете сделать:

 void redirect( RoutingContext rc, String url ) {
  if( !rc.response().ended() ) 
    rc.response().setStatusCode( 303 ).putHeader( 'Location', url ).end()
}
  

Комментарии:

1. в vert.x 4 есть аналогичный метод RoutingContext , поэтому вы можете просто сделать: ctx.redirect(destination)

2. @injecteer Я пробовал, rc.response().setStatusCode( 303 ).putHeader( 'Location', url ).end() я пробовал с кодом состояния 307, 308 также, поскольку http-метод post. Я также устанавливаю токен jwt в заголовке .putHeader( "Authorization","Bearer " token) . Но на целевом сервере (не vertx) он выдает 401 с сообщением «Значение заголовка аутентификации недопустимо». Как установить правильный заголовок с помощью токена jwt?

3. вы можете добавить свой токен в качестве параметра GET: putHeader( 'Location', url '/' token )

4. Я не думаю, что клиент может делегировать заголовки другому серверу, только URL, поэтому вы можете использовать стандартную функцию перенаправления или повторно отправить запрос от клиента с помощью ajax или аналогично

5. Спасибо, поскольку я использую vertx 3.9, я использовал предложенное решение, и перенаправление работает.