Accept
Применение
Заголовок Accept управляет согласованием содержимого. Клиент отправляет список медиатипов, упорядоченный по предпочтению, а сервер выбирает наиболее подходящий из представлений, доступных для запрошенного ресурса.
Браузеры устанавливают этот заголовок автоматически, исходя из контекста запроса. Навигационный запрос обычно запрашивает text/html, тогда как элемент изображения запрашивает распространённые форматы изображений. Клиенты API часто отправляют application/json или application/xml.
Когда у сервера нет представления, соответствующего ни одному из перечисленных типов, ожидаемый ответ — 406 Not Acceptable. На практике же многие серверы игнорируют этот заголовок и возвращают представление по умолчанию.
Примечание
Заголовок Accept не обязателен. Его отсутствие означает, что клиент принимает любой медиатип (/). Браузеры отправляют / как запасной вариант, а многие серверы полностью игнорируют Accept, возвращая фиксированный Content-Type независимо от предпочтений клиента.
media-type/subtype
Конкретный медиатип, например text/html или application/json. Сервер воспринимает полную пару type/subtype как явно указанное предпочтение.
media-type/*
Подстановочный подтип. image/* означает согласие на любой формат изображения, будь то image/png, image/webp или image/avif.
*/*
Принимается любой медиатип. Этот подстановочный знак служит запасным вариантом, когда ни один другой тип не подходит.
;q= (значение качества)
Вес от 0 до 1, выражающий относительное предпочтение. Чем выше значение, тем сильнее предпочтение. Если он опущен, вес по умолчанию равен 1.0. Значение 0 означает, что тип неприемлем.
Пример
Браузер, запрашивающий HTML-страницу, отправляет несколько медиатипов, упорядоченных по значению качества. Побеждает поддерживаемый сервером тип с наибольшим весом.
Accept: text/html, application/xhtml+xml, */*;q=0.8
Клиент API, запрашивающий JSON с запасным вариантом XML, назначает XML более низкое значение качества.
Accept: application/json, application/xml;q=0.9
ИИ-агент запрашивает страницу в формате Markdown, чтобы сократить расход токенов, с запасным вариантом HTML.
Accept: text/markdown, text/html;q=0.9
ИИ-агенты и согласование содержимого
Провайдеры CDN вроде Cloudflare на лету преобразуют HTML-страницы в Markdown, когда запрос содержит Accept: text/markdown. Такое преобразование сокращает количество токенов до 80%, что делает согласование содержимого практичной оптимизацией для агентов и сканеров на базе LLM.
Клиент API, запрашивающий структурированные ответы об ошибках, использует application/problem+json наряду с обычным типом содержимого. Сервер возвращает описание проблемы при ошибках и JSON при успешных ответах.
Accept: application/problem+json, application/json
Запрос, перечисляющий несколько текстовых форматов с явными приоритетами. text/html несёт вес по умолчанию 1.0, следом text/plain с 0.9, любой другой текстовый формат — 0.8, а всё остальное — 0.7.
Accept: text/html, text/plain;q=0.9, text/*;q=0.8, */*;q=0.7
Примечание
Когда два типа имеют одинаковое значение качества, приоритет получает более конкретный тип. Если и text/html, и text/* несут вес 1.0, сервер выберет text/html.