На что влияет заголовок Accept?

  • Автор темы Автор темы BAZAg
  • Дата начала Дата начала

BAZAg

Client
Регистрация
08.11.2015
Сообщения
2 343
Реакции
2 761
Баллы
113
Значит когда смотрю в браузере запросы - вижу заголовок примерно в таком виде:
Код:
Развернуть Свернуть Копировать
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

В процессе, работы, мне не особо нравится что он такой длинный.
Из-за чего я его обрезаю примерно так:
Код:
Развернуть Свернуть Копировать
Accept: */*

Так вот вопрос в том, насколько вообще это критично?
Тоесть, на уровне сервера, который принимает этот запрос - что там происходит, почему нельзя просто всегда слать обрезаный?
Код:
Развернуть Свернуть Копировать
Accept: */*
Или все же можно слать обрезаный...
 
Попробуйте - если с компьютера дым не пойдет - значит не критично - можно использовать (на свой страх и риск).
Вы наверно не внимательны.
Я описал ситуацию предельно конкретно:
Дым не идёт, всё отлично!

При этом мне хочется разобраться с тем, как это работает на стороне сервера.
Какие проверки там проводятся относительно данного заголовка.
Не будет ли последствий в виде банов например из-за передачи данных в таком виде.
 
Не будет ли последствий в виде банов например из-за передачи данных в таком виде.
Откуда нам это знать. Не думаю что тут сидит администратор сайта с которым вы работаете и сможет вам ответить, смотрит ли он эти логи вообще.
Большая часть сайтов работает не глядя логи вообще.
 
Откуда нам это знать.
Именно для этого я пишу об этом публично на форуме, чтобы найти людей, которые это знают.

Не думаю что тут сидит администратор сайта с которым вы работаете и сможет вам ответить, смотрит ли он эти логи вообще.
Я говорю о базовой концепции, актуальной для любого сайта, а не для какого-то конкретного.
Дело не в логах как таких - а в том, как работает эта технология.
Уверен что есть люди, которые пишут сайты на каком-то условном php/nodejs и тп и требуют от браузера этого заголовка - то они точно знают зачем им нужен этот заголовок и как они его обрабатывают.
Тоесть ответ компетентных в этом вопросе принесет пользу не только мне, но и другим людям которые также будут интересоваться данным вопросом.

Большая часть сайтов работает не глядя логи вообще.
Сейчас большая часть сайтов создается на микросервисах.
Это значит, что трассировка и логирование там идут фактически из коробки.
Но, это обратно шаг в сторону от темы.
 
Именно для этого я пишу об этом публично на форуме, чтобы найти людей, которые это знают.


Я говорю о базовой концепции, актуальной для любого сайта, а не для какого-то конкретного.
Дело не в логах как таких - а в том, как работает эта технология.
Уверен что есть люди, которые пишут сайты на каком-то условном php/nodejs и тп и требуют от браузера этого заголовка - то они точно знают зачем им нужен этот заголовок и как они его обрабатывают.
Тоесть ответ компетентных в этом вопросе принесет пользу не только мне, но и другим людям которые также будут интересоваться данным вопросом.


Сейчас большая часть сайтов создается на микросервисах.
Это значит, что трассировка и логирование там идут фактически из коробки.
Но, это обратно шаг в сторону от темы.
Слать обрезаный Accept: */* можно, и во многих случаях всё будет работать, но в браузерной автоматизации и парсинге это может сыграть против вас.

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

Что происходит на стороне сервера?​

Заголовок Accept сообщает серверу, какие MIME-типы (форматы данных) ваш клиент готов принять в качестве ответа, а также их приоритет (коэффициент q от 0 до 1).

1. Когда вы шлете полный заголовок​

Вы говорите серверу:

«Я больше всего хочу HTML (text/html), но если его нет — пойму XML (application/xml). Также я поддерживаю современные форматы картинок (image/avif, webp) на случай, если ты отдаешь их прямо по этому URL. В крайнем случае приму любой формат (*/*).»
Сервер с помощью механизма Content Negotiation (согласование содержимого) смотрит на этот список и выбирает наилучший формат, который он умеет отдавать.

2. Когда вы шлете​

Вы говорите серверу:

«Мне всё равно, в каком формате ты вернешь ответ. Кидай что угодно.»
В этом случае сервер:

  • Просто отдаст тот формат по умолчанию, который зашит у него для этого маршрута (endpoint) — обычно это тот же самый HTML для обычных веб-страниц.
  • Перестанет пытаться подстроиться под конкретные форматы (например, оптимизированные картинки).

Насколько это критично?​

Все зависит от целей вашего запроса:

1. Защита от анти-бот систем (Cloudflare, Akamai, DataDome и др.) — 🔥 КРИТИЧНО​

Если вы пишете скрипты автоматизации или парсинга, обрезать заголовок крайне не рекомендуется.

Современные анти-бот системы анализируют палец клиента (HTTP Fingerprint). Они знают, как именно выглядит заголовок Accept у реального Google Chrome, Firefox или Safari на конкретной ОС.

  • Реальный Chrome всегда шлет специфическую строчку со списками приоритетов (включая image/avif, image/webp, signed-exchange).
  • Если анти-бот видит User-Agent от свежего Chrome, но при этом Accept: */*, он сразу помечает запрос как подозрительный или выдает 403 Forbidden / Captcha.

2. Загрузка медиа-файлов и API — 🟢 НЕ КРИТИЧНО​

  • Для REST API: Обычно передается Accept: application/json или вовсе Accept: */*. Здесь серверу не нужен длинный список браузерных типов.
  • Для статики (картинки, CSS, JS): Обрезанный Accept: */* сработает без проблем в 99% случаев.

3. Формат ответа сервера (Content Negotiation) — 🟡 ИНОГДА КРИТИЧНО​

Некоторые сервисы отдают разные ответы на один и тот же URL в зависимости от Accept:

  • Если отправить Accept: text/html, сервер вернет визуальную HTML-страницу.
  • Если отправить Accept: application/json, сервер на том же URL вернет чистые данные JSON.
  • С Accept: */* сервер вернет то, что у него прописано как дефолт (не всегда то, что вам нужно).

Резюме​

  • Можно ли слать обрезанный? Да, технически HTTP-протокол это полностью допускает.
  • Что ломается? Если вы имитируете поведение реального пользователя через автоматизацию — обрезанный заголовок выдаст в вас бота.
  • Как лучше поступить?
    • Если работаете с API или кастомными скриптами, где сервер вам подконтролен — используйте Accept: */* или Accept: application/json.
    • Если парсите обычные сайты под видом браузера — оставьте оригинальный длинный заголовок от реального Chrome/Firefox.
 
  • Оценить
Реакции: Dmitriy_Zenno
Можно ли слать обрезанный? Да, технически HTTP-протокол это полностью допускает.

Пользователь @nole в этой теме говорил о том, что при имитации работы мобильного приложения есть смысл совсем убрать из запросов этот заголовок.

Может быть ещё есть случаи, в которых использование данного заголовка не желательно или специально есть смысл использовать обрезаный?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)