3

Jetty では、Cookie をアタッチすると、HTTP 応答ヘッダーに Cookie が追加されるだけでなく、Expires HTTP ヘッダーの値も変更されます。

((HttpServletResponse)response).addCookie(cookie);

Jetty が正しい/適切な有効期限設定をいじるのをやめる必要があります。

補足として、このように動作する特定の/正当な理由はありますか? 私の推測では、Jetty は、Cookie が設定されている場合、コンテンツは常に動的であるため、キャッシュされないように期限切れに設定する必要があると想定しています。

更新: Jetty 8.1.8.v20121106を使用してこれをテストする

4

1 に答える 1

6

Jetty 8 のコードベースをざっと見てみました。Expires (HTTP 応答ヘッダーとして) が値に強制されるか、存在する場合は削除されるコードベースの状況を次に示します。

  • 任意の HTTP 206 応答 (強制削除、RFC2616 仕様による)
  • org.eclipse.jetty.server.handler.MovedContextHandler の使用 (未設定の場合は強制)
  • フォーム認証時、エラーで応答する必要がある場合は、ディスパッチ処理 (強制削除) を介して
  • フォーム認証チャレンジレスポンス中(強制削除)

Expires as a HTTP Response Header は以上です。

ただし、これを の一部として指摘したので.addCookie()、応答の Set-Cookie ロジックにある Cookie 値文字列の一部として、Cookie 仕様の Expires ヘッダーも存在することを指摘したいと思います。

Cookie.setMaxAge()これにより、値が 0 以上の場合、Cookie Expires ヘッダーが強制されます。これは、Cookie 値で が提供されるMax-Age=まで無視されるさまざまなブラウザのバグを回避するために行われます。Expires=

Cookieのデフォルトの動作:

  • Cookie.setMaxAge(-1);Max-Age=との両方を無効にしますExpires=
  • Cookie.setMaxAge(0);結果はExpires=00:00:00 UTC on 1 January 1970(UNIXエポックの開始)になります
  • Cookie.setMaxAge(60000);将来はExpires=1 分になります。

バージョン 1 Cookie の動作 (別名Cookie.setVersion(1)):

  • Cookie.setMaxAge(-1);Max-Age=との両方を無効にしますExpires=
  • Cookie.setMaxAge(0);andにMax-Age=0なりますExpires=00:00:00 UTC on 1 January 1970(UNIX エポックの開始)
  • Cookie.setMaxAge(60000);と1 分後の結果にMax-Age=60000なります。Expires=
于 2013-03-14T14:09:03.353 に答える