Я заметил, что веб-сервер Glassfish-5 отправляет ответы только с одним заголовком Set-Cookie
, который содержит несколько файлов cookie. Когда я смотрю с помощью Firebug, я вижу, что они разделены неизвестным персонажем. В любом случае - Firefox читает только первый файл cookie. Как настроить Glassfish5 для отправки нескольких заголовков Set-Cookie - по одному для каждого файла cookie? rfc6265 утверждает, что:
- Обзор
Серверы происхождения НЕ ДОЛЖНЫ сбрасывать несколько полей заголовка Set-Cookie в одно поле заголовка. Обычный механизм для складывающиеся заголовки HTTP-заголовков (то есть, как определено в [RFC2616]), могут измените семантику поля заголовка Set-Cookie, потому что Символ% x2C ( "," ) используется Set-Cookie способом, который конфликтует с такой складкой.
Также здесь сказано:
При отправке HTTP-ответа с несколькими файлами cookie, CFHTTPMessage объединяет файлы cookie в список, разделенный запятыми, под одним HTTP-заголовок "Set-Cookie". (Это называется "Set-Cookie складным".)
Set-cookie-folding НЕ поддерживается в Google Chrome, Firefox и Internet Explorer. Каждый из этих браузеров полностью игнорирует каждый cookie после первой запятой, полностью отдавая CFHTTPMessage бесполезно для обработки HTTP-ответов с несколькими куки файлами в любом браузер, отличный от Safari (который поддерживает слияние файлов cookie).
Вот как выглядит ответ на firebug:
Два куки файла соединены неизвестным персонажем. Как я заметил, другие серверы, такие как Apache, разбивают несколько файлов cookie на один заголовок Set-Cookie
на новый символ строки.
Я заметил, что это происходит только при соединениях HTTPS.
Кроме того, я открыл проблему в Github здесь.
Пробовал одно и то же веб-приложение для работы на веб-сервере Tomcat 9 - куки заголовка Set-Cookie
разделены новым символом строки, он работает как ожидаемый...
Тот же ответ, но на Glassfish5, и снова - файлы cookie соединяются неизвестным персонажем и не принимаются Firefox (только первый):
В NetBeans IDE 8.2. Монитор HTTP-сервера. Я вижу, что отправлено 2 файла cookie - он выглядит нормально:
Еще раз на FireFox - 2 файла cookie в одном заголовке Set-Cookie:
Получено только одно - и неправильное значение...:
То же самое в Firefox Developer Edition:
Полностью запутано..
Glassfish 5 использует Grizzly Framework 2.4.0 - я думаю, что источники доступны в grizzly-http-servlet-2.4.0-sources.jar - но не могут найти фрагмент кода, в котором файлы cookie объединены в одну строку.
Теперь я могу подтвердить, что он связан только с протоколом HTTP/2.0, протестированным в firefox, включив/отключив network.http.spdy.enabled.http2
в about:config
. По HTTP/1.1 через HTTPS файлы cookie устанавливаются как ожидалось.