Отпечаток HTTP/2
Подпись, складывающаяся из того, как клиент открывает соединение HTTP/2: его настройки, размеры окон, приоритеты и порядок заголовков.
Открывая соединение HTTP/2, клиент объявляет набор параметров ещё до всякого запроса: настройки кадров, начальный размер окна, приоритеты и порядок, в котором идут псевдозаголовки. Выбирает всё это библиотека, а не вы, и разные библиотеки выбирают по-разному.
Получается подпись, опознающая инструмент. Популярная библиотека для сбора, браузерный движок и консольный клиент дают узнаваемо разные, и разница видна раньше, чем прочитана первая строка запроса.
Поэтому отказ, приходящий мгновенно и на любом адресе, часто не имеет к адресам отношения. Клиент объявил, чем он является, при установлении соединения, и решение приняли там.
По той же причине лечение живёт в клиенте. Выглядеть браузером означает использовать клиент, который согласовывает соединение как браузер, а не отправлять браузерный user agent из библиотеки, согласовывающей его как библиотека. Убедительный user agent на несоответствующем соединении это противоречие, которое сервер видит сразу.
Что объявляется до запроса
Соединение открывается кадром настроек: размер таблицы заголовков, разрешён ли push, максимум одновременных потоков, начальный размер окна и размер кадра. Библиотеки выбирают разные значения и отправляют их в разном порядке.
Дальше идёт порядок псевдозаголовков. Четыре обязательных псевдозаголовка можно отправлять в любом порядке, и у каждой реализации своя привычка, что само по себе заметно сужает круг.
Вместе с предшествовавшим рукопожатием TLS это даёт защите две независимые подписи ещё до первого обычного заголовка, и обе они свойства программы, а не сети.
Отличить проблему клиента от проблемы адреса
Один эксперимент разделяет их, и занимает он минуту:
Один адрес, разные клиенты
# один и тот же выход, два разных клиента
curl -o /dev/null -s -w "curl: %{http_code}
" -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/
# затем тот же адрес страницы через настоящий браузер с тем же выходом
# если curl отказали, а браузеру нет, дело никогда не было в адресе- Если мгновенно отказывают всем классам адресов, подозревайте клиента раньше, чем покупать адрес подороже.
- Браузерный user agent, отправленный из HTTP-библиотеки, хуже, чем никакого: он создаёт противоречие, которое обнаруживается элементарно.
- Там, где сайт действительно требует браузерного согласования, ответом является браузер, и цена этого выражается в трафике, а не в типе адреса.
Чем это не является
Это не то же самое, что JA3
JA3 описывает рукопожатие TLS. Здесь речь про уровень HTTP/2 над ним. Сайт может проверять любое из двух или оба.
Прокси этого не меняет
Подпись принадлежит вашему клиенту. Маршрутизация через другую страну меняет, откуда вы пришли, а не то, как вы выглядите.
Заголовками это не лечится
Значения заголовков читаются, когда соединение уже охарактеризовано. Изменить впечатление они не могут.
Проверяют это не всегда
Множество сайтов туда не смотрит. Выяснять это стоит экспериментом с двумя клиентами, а не предположением.
Связанные термины
Смотри на практике
Готов использовать отпечаток http/2?
SotaProxy даёт доступ к ротирующим резидентским, мобильным, дата-центр и ISP прокси. Без минимальных платежей.
Начать