2012-02-05 2 views
4

Я использую комплект 1.11 для передачи некоторых веб-сервисов RESTful.Jersey Истекает Заголовок не работает

Каждый раз, когда я просматриваю ресурс REST с помощью Chrome, я замечаю, что истечет срок действия HTTP-заголовка: Thu, 01 Jan 1970 01:00:00 CET.

Я попытался изменить ответ, добавив:

return Response.ok(myObject).expires(new Date(System.currentTimeMillis() + 3000)).build(); 

К сожалению, это добавляет другой заголовок HTTP Истекает вместо того, чтобы заменить старый.

В чем проблема?

+1

Похоже, что это может быть ошибка. –

+0

заголовок по умолчанию не добавляется, должна быть какая-то другая логика или, возможно, добавлена ​​вашим контейнером - проверьте его настройки/документацию .. –

ответ

1

FWIW, я вижу то же самое поведение. Контейнер здесь JBoss 4.2.3. Это метод PUT с аутентификацией BASIC. Мой ответ генерируется следующим образом:

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

При вызове локон, эти возвращенные заголовки:

< 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

Это, чтобы ваш браузер от кэширования запрашиваемого ресурса. Сама дата является отметкой времени с нулевыми секундами, началом эры UNIX.

0

Я обнаружил, что мой сервер приложений (в данном случае JBoss 4.2.3.GA) не позволит Джерси переписывать заголовок таким образом.

Чтобы обойти:

  1. Инжектируйте объект ответа в метод с использованием параметра:

    @Context javax.servlet.http.HttpServletResponse ответ

  2. Установить заголовок объекта ответа, а не использование .expires():

    response.setDateHeader («Истекает», System.currentTimeMillis() + 14400000);

Я использовал # 2, прежде чем я назвал .build() на ResponseBuilder, не уверен, если это имеет значение или нет, когда вы делаете это.

0

У меня такая же проблема. Мой обходной путь является:

  1. Инжектируйте ответ @Context javax.servlet.http.HttpServletResponse response

  2. Сброс объекта ответа response.reset();

  3. Используйте ResponseBuilder, чтобы установить заголовки. return Response .ok(icon.getData()) .type(icon.getContentType()) .expires(cal.getTime()) .build();