2014-02-04 2 views
2

Я просто попробовал настройку (фактически, удаление - с помощью максимального возраста, установленного в 0), cookie сеанса, когда я обнаруживаю конкретную ошибку клиента. Ответ HTTP, который я использую, относится к категории 4xx (например, 401, 406 и т. Д.).Могут ли печеньки быть установлены из ответов 4xx?

Удаление печенье прекрасно работает с такого рода реакции, генерируемой на стороне сервера:

  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?

+0

Вы протестировали несколько браузеров? Вы проверили в инструментах разработчика вашего браузера, если на самом деле есть заголовок 'Set-Cookie'? Это может также быть связано с реализацией класса 'Response'. – lanzz

ответ

3

RFC 6265 утверждает, что эти печенья MUST быть приняты:

Origin сервер может послать заголовок ответа Set-Cookie с любым ответ. Пользовательские агенты МОГУТ игнорировать заголовки Set-Cookie, содержащиеся в ответах с 100-разрядными кодами состояния, но ДОЛЖНЫ обрабатывать Set-Cookie заголовки, содержащиеся в других ответах (включая ответы с 400- и коды состояния на 500 уровней). Исходный сервер может включать в себя несколько полей заголовка Set-Cookie в одном ответе. Наличие поля заголовка Cookie или Set-Cookie не предотвращает кэширование HTTP от хранения и повторного использования ответа.

+0

Я знал, что это было странно - спасибо за подтверждение, что это похоже на ошибку браузера (я кодирую Firefox26/Linux). – angularJsNewbie

Смежные вопросы