Как вы, возможно, знаете, RF C 6265 указывает, что разрешено иметь несколько заголовков с именем Set-Cookie
.
Однако Fetch API не позволяет это сделать, потому что все методы, предоставляемые его интерфейсом Headers (включая get()
, set()
, append()
, entries()
и все остальные), были реализованы для слияния значения всех заголовков с тем же именем в один заголовок, разделенный запятыми.
Например, если мы сделаем это:
var headers = new Headers();
headers.append('content-type', 'text/plain');
headers.append('set-cookie', 'test1=v; Max-Age=0');
headers.append('set-cookie', 'test2=v; Max-Age=0');
headers.append('set-cookie', 'test3=v; Max-Age=0');
, а затем мы попытаемся прочитать set-cookie
значения с использованием get('set-cookie')
или путем итерации переменной headers
с помощью entries()
, мы получаем следующее:
'set-cookie' : test1=v; Max-Age=0, test2=v; Max-Age=0, test3=v; Max-Age=0
Обратите внимание, что такое же неправильное поведение также происходит, если мы пытаемся прочитать или изменить существующий объект ответа, имеющий несколько заголовков с одинаковым именем (т.е. созданный другими фреймворками, которые, возможно, поддерживают такое разрешенное поведение): другими словами, похоже, что Fetch API
полностью неспособен правильно справиться с таким сценарием.
Теперь, почему Если это поведение желательно для некоторых заголовков, таких как Accept
, заголовок Set-Cookie
неправильно анализируется большинством браузеров (включая Chrome и Firefox), что приводит к неправильной установке файлов cookie.
Это известная ошибка? Если это так, есть ли обходной путь, который можно использовать для решения этой проблемы?