当我检测到特定的客户端错误时,我只是尝试设置(实际上,删除 - 通过max age设置为0)会话cookie。我使用的HTTP响应来自4xx类别(例如401,406等)。
在服务器端生成的这种响应中,cookie删除工作正常:
Response resp = Response.status(Response.Status.OK).header(
"Set-Cookie",
cookieName+"="+sessionId+"; "+
"Version=1; Max-Age=0; Path=" + cookiePath + "; " +
"Expires=Thu, 01 Jan 1970 00:00:00 GMT").entity("").build();
......但是失败了:
Response resp = Response.status(Response.Status.UNAUTHORIZED).header(
"Set-Cookie",
cookieName+"="+sessionId+"; "+
"Version=1; Max-Age=0; Path=" + cookiePath + "; " +
"Expires=Thu, 01 Jan 1970 00:00:00 GMT").entity("").build();
(唯一区别:200 => 406)。
使用4xx响应无法设置cookie吗?
答案 0 :(得分:4)
RFC 6265声明接受必须的Cookie:
Origin服务器可以使用any发送Set-Cookie响应头 响应。用户代理可以忽略包含的Set-Cookie头 具有100级状态代码的响应但必须处理Set-Cookie 其他回复中包含的标题(包括400-的回复) 和500级状态代码)。源服务器可以包括多个 单个响应中的Set-Cookie标头字段。存在的 Cookie或Set-Cookie标头字段不排除HTTP缓存 存储和重用响应。