Заголовки HTTP

Заголовки HTTP — служебные строки запроса, в которых программа передаёт сайту язык, тип браузера, cookies и другое.

Обновлено · Редакция Prokso

Вместе с адресом страницы браузер отправляет десяток заголовков: User-Agent, Accept-Language с языком, Referer со страницей, откуда вы пришли, Cookie с cookies.

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

Обычный прокси не меняет заголовки — их отправляет ваша программа. Но некоторые прокси добавляют свои, например Via или X-Forwarded-For, и этим себя выдают. Об этом — в статье прозрачный прокси.

Через туннель к сайтам с HTTPS заголовки идут зашифрованными, и прокси их не видит.

Как увидеть заголовки, которые отправляет ваша программа

В браузере откройте DevTools, вкладку Network, кликните запрос и посмотрите раздел Request Headers. В консоли запустите curl с флагом -v: строки с > — это то, что curl отправил, строки с < — то, что вернулось.

У библиотек свои значения по умолчанию. Python requests отправляет User-Agent: python-requests/2.x, curl — curl/8.x или похожее, в зависимости от версии. Такие значения сразу говорят сайту, что запрос автоматический, и сайт может ограничивать его строже.

Какие заголовки от вас, а какие от прокси

ЗаголовокКто его ставитЧто узнает сайт
User-Agent, Accept-Languageваша программабраузер и язык
Cookieваша программавашу сессию на сайте
Proxy-Authorizationваша программа, для проксиничего: прокси обычно оставляет его себе
Via, X-Forwarded-Forнекоторые проксичто работает прокси, иногда ваш IP

Заголовок Proxy-Authorization несет логин и пароль плана к прокси. Для сайтов на HTTPS он идет только в запросе CONNECT к прокси, так что сайт его не получает. Какие прокси-заголовки доходят до сайта, покажет проверка прокси, а про IP в заголовках — статья X-Forwarded-For.

Согласованность между заголовками

Браузеры на основе Chromium вместе с User-Agent отправляют заголовки Sec-CH-UA с названием и версией браузера. Если они называют разные версии, запрос выглядит противоречивым. По HTTP/2 названия заголовков всегда передаются строчными буквами, так что не удивляйтесь, когда в журналах видите user-agent вместо User-Agent. А Accept-Language должен соответствовать языку, который вы ожидаете увидеть: по нему сервер часто выбирает, какую версию страницы вернуть.

Вопросы и ответы

Меняет ли прокси заголовки?

Нет, заголовки отправляет ваша программа. Прокси меняет только адрес, который видит сайт.

Какие заголовки важны для парсера?

User-Agent актуального браузера, Accept-Language под страну прокси и Accept. Стандартные заголовки библиотек сразу выдают автоматический запрос.

Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт