← Cloudflare Workers / workers / runtime-apis
Headers
Контекст
Все заголовки HTTP-запросов и ответов доступны через Headers API ↗.
Если у заголовка несколько значений, они объединяются в одну строку через запятую. Это означает, что Headers.get всегда возвращает строку или null значение. Это применимо ко всем именам заголовков, кроме Set-Cookie, для которого требуется Headers.getAll. Это описано ниже в разделе Различия.
let headers = new Headers();
headers.get('x-foo'); //=> null
headers.set('x-foo', '123');
headers.get('x-foo'); //=> "123"
headers.set('x-foo', 'hello');
headers.get('x-foo'); //=> "hello"
headers.append('x-foo', 'world');
headers.get('x-foo'); //=> "hello, world"Различия
Реализация Workers для Headers API в нескольких аспектах отличается от веб-стандарта. Эти отличия сделаны намеренно и отражают серверную природу среды выполнения Workers.
getAll() метод
Несмотря на то что Headers.getAll метод устарел в веб-браузерах, но Workers по-прежнему предоставляет его для использования с Set-Cookie заголовок. Это связано с тем, что cookie часто содержат строки с датами, включающими запятые. Из-за этого разбор нескольких значений в Set-Cookie заголовок затруднительным.
Любые попытки использовать Headers.getAll с другими именами заголовков вызовет ошибку. Краткая история Headers.getAll доступен в этом Issue в GitHub ↗.
Set-Cookie обработка
Из-за RFC 6265 ↗ запрещающей объединение нескольких Set-Cookie заголовков в один заголовок, Headers.append метод позволяет задать несколько Set-Cookie заголовки ответа вместо того, чтобы добавлять значение к уже существующему заголовку.
const headers = new Headers();
headers.append("Set-Cookie", "cookie1=value_for_cookie_1; Path=/; HttpOnly;");
headers.append("Set-Cookie", "cookie2=value_for_cookie_2; Path=/; HttpOnly;");
console.log(headers.getAll("Set-Cookie"));
// Array(2) [ cookie1=value_for_cookie_1; Path=/; HttpOnly;, cookie2=value_for_cookie_2; Path=/; HttpOnly; ]USVString тип возвращаемого значения
В Cloudflare Workers Headers.get метод возвращает USVString ↗ вместо ByteString ↗, который определён веб-стандартом. В большинстве сценариев это не должно приводить к заметным отличиям. Чтобы сравнить различия между этими двумя классами строк, см. Пример Playground ↗.
Заголовки Cloudflare
Cloudflare добавляет ряд собственных заголовков во входящие запросы и исходящие ответы. Некоторые из них используются для внутреннего учёта и отслеживания, но многие могут пригодиться и в ваших приложениях, в том числе в Workers.
Список задокументированных заголовков запросов Cloudflare см. в HTTP-заголовки Cloudflare.
Дополнительные материалы
- Вывод заголовков в консоль - Ознакомьтесь с тем, как выводить заголовки в лог консоли.
- HTTP-заголовки Cloudflare - Содержит список специфических заголовков, которые добавляет Cloudflare.