在 303 回答期间丢失 Header
Lost Header during 303 answer
我有以下处理程序,它将我的请求重定向到另一个处理程序 (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();
}
}
}
这是以下Header,登录Header:
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();
}
}
我无法阅读请求Header我添加的 Header USER。
我做错了什么?
提前致谢。
响应header不遵循 http 重定向。您可以将其作为 cookie 或作为 Location
header 的查询参数包含在内。
将您的位置更改为:
hds.add("Location","/login?User=someUser");
或将其添加为 SetCookie header:
hds.add("Set-Cookie", "User=someuser")
Set-Cookie 将告诉浏览器存储 cookie 并将其包含在返回服务器的所有请求中。将它包含在您的位置中将使它在处理重定向时可访问一次。
我有以下处理程序,它将我的请求重定向到另一个处理程序 (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();
}
}
}
这是以下Header,登录Header:
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();
}
}
我无法阅读请求Header我添加的 Header USER。 我做错了什么?
提前致谢。
响应header不遵循 http 重定向。您可以将其作为 cookie 或作为 Location
header 的查询参数包含在内。
将您的位置更改为:
hds.add("Location","/login?User=someUser");
或将其添加为 SetCookie header:
hds.add("Set-Cookie", "User=someuser")
Set-Cookie 将告诉浏览器存储 cookie 并将其包含在返回服务器的所有请求中。将它包含在您的位置中将使它在处理重定向时可访问一次。