2012-02-05 18 views
4

Jerseyバンドル1.11を使用して、いくつかのRESTful Webサービスを提供しています。Jersey Expiresヘッダーが機能しない

ChromeでRESTリソースをブラウズするたびに、HTTPヘッダーの有効期限が、01年1月1日01:00:00、CETに設定されていることがわかりました。

私は追加の対応を編集してみました:

残念ながら
return Response.ok(myObject).expires(new Date(System.currentTimeMillis() + 3000)).build(); 

を、これは別のHTTPヘッダーではなく、古いものを置き換えるの有効期限が追加されます。

何が問題ですか?

+1

これはバグかもしれません。 –

+0

ヘッダーはデフォルトではどこにも追加されていません。他のロジックがあるか、コンテナによって追加されている必要があります。設定/ドキュメントを確認してください。 –

答えて

1

FWIW、私は全く同じ動作を見ています。ここのコンテナはJBoss 4.2.3です。これは、BASIC認証を使用するPUTメソッドです。私の応答は、このように生成されます。

< HTTP/1.1 204 No Content 
< Server: Apache-Coyote/1.1 
< Pragma: No-cache 
< Cache-Control: no-cache 
< Expires: Thu, 01 Jan 1970 01:00:00 CET 
< X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (... 
< Expires: Tue, 13 Mar 2012 11:08:54 GMT 
< Date: Tue, 13 Mar 2012 11:08:24 GMT 
< 
0

これは、要求されたリソースをキャッシュからブラウザを防ぐためです:

Date exp = new Date(System.currentTimeMillis() + lifetime); 
return Response.noContent().expires(exp).build(); 

のcURLを起動すると、これらは返されるヘッダです。 日付自体は、UNIX時代の始まりである0秒のタイムスタンプです。

0

私のアプリケーションサーバー(この場合はJBoss 4.2.3.GA)では、この方法でJerseyがヘッダーを上書きすることができませんでした。

  1. パラメータを使用してメソッドに応答オブジェクトを注入:

    @Context javax.servlet.http.HttpServletResponseの応答

    設定
  2. 回避策

    .expires()を使用するのではなく、レスポンスオブジェクトのヘッダー:

    response.setDateHeader( "Expires"、System.currentTimeMillis()+ 14400000);

私は.buildと呼ばれる前に、私はあなたがこれを行うと、それは違いを作るか、いないかどうかわから、ResponseBuilder上)(#2を使用していません。

0

私は同じ問題があります。私の回避策は次のとおりです。

  1. が応答オブジェクト response.reset();

  2. 使用して、ヘッダーを設定するResponseBuilderをリセット応答 @Context javax.servlet.http.HttpServletResponse response

  3. を注入します。 return Response .ok(icon.getData()) .type(icon.getContentType()) .expires(cal.getTime()) .build();

関連する問題