Заголовки 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 ГБ
Регистрация за минуту, доступы сразу после оплаты.