4

当我检测到特定的客户端错误时,我只是尝试设置(实际上是通过将最大年龄设置为 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)。

cookie 不能用 4xx 响应设置是真的吗?

4

1 回答 1

9

RFC 6265声明必须接受这些 cookie:

源服务器可以发送带有任何响应的 Set-Cookie 响应标头。用户代理可以忽略包含在具有 100 级状态代码的响应中的 Set-Cookie 头,但必须处理包含在其他响应中的 Set-Cookie 头(包括具有 400 和 500 级状态代码的响应)。源服务器可以在单个响应中包含多个 Set-Cookie 标头字段。Cookie 或 Set-Cookie 标头字段的存在并不妨碍 HTTP 缓存存储和重用响应。

于 2014-02-04T13:51:13.493 回答