Устанавливается только первый cookie в заголовке set-cookie (после перезапуска хостинга Firebase) - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь отправить несколько файлов cookie в одном ответе от серверной части экспресс-узла. Заголовок set-cookie устанавливается со значениями, которые кажутся действительными, но ни один из файлов cookie, кроме первого, никогда не сохраняется. Что может быть причиной этого? Возможно ли, что некоторые другие заголовки как-то мешают?

app.post("/api/test", function(req, res) {
    res.cookie("age", "44");
    res.cookie("name", "ok");
    res.cookie("something", "else");
    res.send("cookies set");
});

Результаты в заголовках

Access-Control-Allow-Credentials: true
Cache-Control: private
Content-Type: text/html; charset=utf-8
Etag: W/"b-AindM8n+eJQTR6jb7Hg8S4fG8qI"
Expires: Sat, 05 Oct 2019 16:18:12 GMT
Function-Execution-Id: r7d6qjgl5noi
Server: Google Frontend
X-Cloud-Trace-Context: 051139bdc4cc753cad51c0dd3e89e0b8;o=1
X-Powered-By: Express
Content-Length: 11
Accept-Ranges: bytes
Date: Sat, 05 Oct 2019 16:18:12 GMT
Connection: keep-alive
Set-Cookie: age=44; path=/,name=ok; path=/,something=else; path=/
X-Served-By: cache-ams21036-AMS
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1570292292.302186,VS0,VE410
Vary: Origin,cookie,need-authorization, x-fh-requested-host, accept-encoding

Я ожидал бы, что это сохранит 3 куки в браузере, но всегда сохраняется только первый.

РЕДАКТИРОВАНИЕ:

После дальнейшего расследования причиной того, что заголовок set-cookie записывался как разделенный запятыми однострочный, оказалось, что это Firebase хостинг для перезаписи функции.

{
   "source": "/{,/**}",
   "function": "testingexpress"
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

После дальнейшего расследования причиной того, что заголовок set-cookie был записан как разделенный запятыми однострочный, оказалось, что это Firebase хостинг для перезаписи функции. Отмечено как ошибка.

0 голосов
/ 05 октября 2019

Похоже, что в некоторых версиях Express может возникнуть проблема с генерацией недопустимых или, по крайней мере, часто несовместимых заголовков файлов cookie (синтаксис заголовка файла cookie, RFC 6265 ), когда более одного файла cookie отображается как одинSet-Cookie заголовок. Более стандартным способом было бы предоставить несколько заголовков Set-Cookie в ответе.

В частности, из приведенного выше RFC также является выдержка :

Исходным серверам НЕ СЛЕДУЕТ складывать несколько полей заголовка Set-Cookie в одно поле заголовка. Обычный механизм свертывания полей заголовков HTTP (т. Е. Как определено в [RFC2616]) может изменить семантику поля заголовка Set-Cookie, поскольку символ% x2C (",") используется Set-Cookie способом, который конфликтуетс таким свертыванием.

В этом документе рассматривается возможный обходной путь, и он относится примерно к 2014 году: http://www.connecto.io/blog/nodejs-express-how-to-set-multiple-cookies-in-the-same-response-object/

Мне не удалось воспроизвести это с помощью экспресс 4.17.1 (аналогичный кодгенерирует несколько заголовков Set-Cookie). Похоже, что поведение могло быть изменено около 4.13.0: https://github.com/expressjs/express/commit/5915894af3f14e75dd3121fdc2d92ae55206e398

Я бы посмотрел либо на обновление вашей версии Express, либо на использование обходного пути в приведенной выше статье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...