4

特定のクライアントエラーを検出したときに、セッションCookieを設定しようとしました(実際には、最大年齢を0に設定して削除しました)。私が使用している 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 を設定できないというのは本当ですか?

4

1 に答える 1

9

RFC 6265は、これらの Cookieを受け入れなければならないと述べています。

オリジンサーバーは、応答とともに Set-Cookie 応答ヘッダーを送信する場合があります。ユーザー エージェントは、100 レベルのステータス コードを持つ応答に含まれる Set-Cookie ヘッダーを無視してもよいが、他の応答 (400 および 500 レベルのステータス コードを持つ応答を含む) に含まれる Set-Cookie ヘッダーを処理しなければならない (MUST)。オリジン サーバーは、1 つの応答に複数の Set-Cookie ヘッダー フィールドを含めることができます。Cookie または Set-Cookie ヘッダー フィールドが存在しても、HTTP キャッシュが応答を格納および再利用することを妨げるものではありません。

于 2014-02-04T13:51:13.493 に答える