Потерянный Заголовок во время 303 ответа
У меня есть следующий обработчик, который перенаправляет мой запрос другому обработчику (LoginHandler):
public class ValidationHandler implements HttpHandler
{
@Override
public void handle(HttpExchange httpExchange) throws IOException
{
// Serve for POST requests only
if (httpExchange.getRequestMethod().equalsIgnoreCase("POST"))
{
Headers hds = httpExchange.getResponseHeaders();
hds.add("Content-type","text/html");
hds.add("Location","/login");
//WHERE I ADD THE USER
hds.add("User", "someUser");
//SEND A 303 to go to another handler (LoginHandler)
httpExchange.sendResponseHeaders(303,0);
httpExchange.close();
}
}
}
Это следующий заголовок, LoginHeader:
public class LoginHandler implements HttpHandler
{
@Override
public void handle(HttpExchange httpExchange) throws IOException
{
//I can't read the header USER on the following line!
httpExchange.getRequestHeaders().forEach((k,v) -> System.out.println(k + ':' + v));
httpExchange.sendResponseHeaders(200,data.length());
httpExchange.getResponseBody().write(data.getBytes());
httpExchange.close();
}
}
Я не могу прочитать в заголовке запроса заголовок пользователя, который я добавил. Что я делаю неправильно?
Заранее спасибо.
1 ответ
Решение
Заголовки ответа не следуют за перенаправлениями http. Вы можете включить его в файл cookie или в качестве параметра запроса Location
заголовок.
Измените ваше местоположение на:
hds.add("Location","/login?User=someUser");
или добавьте его в качестве заголовка SetCookie:
hds.add("Set-Cookie", "User=someuser")
Set-Cookie сообщит браузеру сохранить cookie и включить его во все запросы обратно на сервер. Хотя включение его в ваше местоположение сделает его доступным один раз при обработке перенаправления.