go-http-client в логах — не имя одного сервиса, а технический отпечаток стандартной HTTP-библиотеки языка Go. Несмотря на внешнее созвучие, никакой связи с Googlebot у него нет — это независимая, отдельная от Google история, о которой стоит сказать прямо, потому что путаница на этот счёт реально встречается на профильных форумах. За токеном может стоять что угодно: от внутреннего Go-микросервиса до CLI-утилиты мониторинга, написанной сторонним разработчиком.
1. Что такое Go Client на самом деле
go-http-client — это дефолтный User-Agent пакета net/http, встроенного в стандартную библиотеку языка программирования Go. Он появляется автоматически в каждом запросе, если разработчик явно не задал собственный заголовок User-Agent. Поскольку Go — один из самых популярных языков для бэкенд-сервисов, микросервисов, CLI-инструментов и облачных приложений, этот UA массово встречается в логах по всему вебу без какой-либо связи между разными его источниками.
Точная строка зависит не от версии Go и не от конкретного приложения, а от версии HTTP-протокола, которым идёт запрос:
Go-http-client/1.1 — запрос по HTTP/1.1
Go-http-client/2.0 — запрос по HTTP/2
Отдельно стоит закрыть частое заблуждение: несмотря на похожесть названия, go-http-client не имеет никакого отношения к Googlebot или другим краулерам Google — это самостоятельная библиотека языка Go, которую использует кто угодно, включая независимых от Google разработчиков собственных ботов.
| Параметр | Значение |
| Название | Go Client (go-http-client) |
| Природа | Дефолтный User-Agent стандартного пакета net/http языка Go — не отдельный сервис и не компания |
| User-Agent / паттерн | Go-http-client/1.1 (HTTP/1.1) или Go-http-client/2.0 (HTTP/2) — цифра отражает версию протокола, а не версию приложения |
| Оператор | Не существует единого оператора — библиотеку использует неограниченное число независимых Go-программ |
| Связь с Google | Отсутствует, несмотря на созвучие названия — частое заблуждение стоит развеивать явно |
| robots.txt | Поведение полностью зависит от конкретной программы — библиотека сама по себе никакой политики не диктует |
| Пометка TrafficVeil | Легитимный / Технические клиенты |
2. Зачем Go Client приходит на сайт
Как и с любой языковой HTTP-библиотекой, реальных сценариев использования множество одновременно:
- Бэкенд-сервисы и микросервисы — многие компании пишут внутреннюю инфраструктуру на Go именно из-за производительности при параллельных запросах;
- Мониторинг и аптайм-чекеры — популярный язык для написания быстрых, компактных агентов проверки доступности;
- CLI-утилиты — многие консольные инструменты (в том числе публично распространяемые) написаны на Go и делают HTTP-запросы через стандартный клиент;
- Собственные и сторонние боты — Go часто выбирают именно для написания краулеров и скрейперов из-за простоты параллелизации запросов, поэтому под этим UA действительно может скрываться и целенаправленный сбор данных.
Типичный кейс: в аналитике фиксируется рост hits без реальных сессий, в access.log под этим временем преобладает go-http-client на пагинации и карточках товаров. Поскольку у библиотеки нет единого владельца, ключевой вопрос не «кто такой Go Client», а какая конкретно программа стоит за конкретным IP — библиотека тут лишь технический маркер языка реализации, а не идентификатор цели.
3. Нагрузка и риски
Главный практический риск — фоновый шум в аналитике и расход CPU/bandwidth, искажающий статистику «живого» трафика. Поскольку Go — популярный выбор именно для написания быстрых параллельных скрейперов, риск агрессивного, плохо ограниченного по скорости обхода здесь выше, чем у медленных однопоточных скриптов на других языках — стоит внимательнее смотреть на RPS с одного IP.
Как и с другими языковыми HTTP-клиентами, подмена User-Agent на строку браузера — тривиальная операция в одну строку кода. Поэтому нетронутый заголовок go-http-client в логах — слабый, но реальный сигнал: тот, кто целенаправленно хочет скрыть автоматизацию, обычно маскируется под браузер, а не оставляет дефолтную строку библиотеки.
4. Как найти Go Client в логах
# Базовый поиск
grep -i "go-http-client" /var/log/nginx/access.log
# Разбивка по версии протокола — HTTP/1.1 vs HTTP/2, может указывать на разные источники
grep -oiE "go-http-client/[0-9.]+" /var/log/nginx/access.log | sort | uniq -c | sort -rn
# Топ URL, которые вычитывает клиент
grep -i "go-http-client" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head
# Топ IP — здесь особенно важно из-за высокой вероятности параллельного обхода
grep -i "go-http-client" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
# RPS с одного IP в минуту — Go-скрейперы чаще агрессивны по параллелизму
grep -i "go-http-client" /var/log/nginx/access.log | awk '{print $1, $4}' | cut -d: -f1,2 | sort | uniq -c | sort -rn | head
Верификация. Строку UA подделать может любой скрипт. Для решения allow/deny смотрите связку UA + IP/ASN + частоту + набор URL — при таком общем UA это единственный способ понять, кто именно за ним стоит:
IP="1.2.3.4"
whois -h whois.cymru.com " -v $IP"
dig +short -x "$IP"
5. robots.txt для Go Client
# Жёсткий запрет
User-agent: go-http-client
Disallow: /
# Разрешить всё
User-agent: go-http-client
Allow: /
# Компромисс: закрыть личный кабинет и служебные разделы, оставить публичку
User-agent: go-http-client
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Disallow: /account/
Disallow: /api/
Allow: /
Важно: под этим UA могут скрываться никак не связанные между собой клиенты, включая, возможно, ваш собственный внутренний Go-сервис. Прежде чем ставить общий Disallow, стоит убедиться, что среди источников нет своего же бэкенда или мониторинга.
6. Блокировка вручную и через TrafficVeil
Nginx:
if ($http_user_agent ~* "go-http-client") {
return 403;
}
limit_req_zone $binary_remote_addr zone=gohttpclient:10m rate=10r/m;
location / {
if ($http_user_agent ~* "go-http-client") {
limit_req zone=gohttpclient burst=20 nodelay;
}
}
Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} go-http-client [NC]
RewriteRule ^ - [F,L]
TrafficVeil:
- перед блокировкой по UA уточните у команды разработки, не завязан ли на go-http-client собственный сервис или мониторинг;
- если источников несколько и часть агрессивно параллелит запросы — точнее ограничивать по конкретным IP/ASN, а не по всему UA сразу;
- учитывая склонность Go-скрейперов к высокому параллелизму, для этого UA rate-limit часто полезнее мягкого allow даже при отсутствии явного вреда;
- после изменения сверьте логи: нежелательные хиты должны уйти в блок/лимит, а собственные сервисы (если есть) — продолжать работать штатно.
7. Что делать: короткий алгоритм
- Убедитесь, что среди источников нет вашего же Go-сервиса или мониторинга — это первый шаг именно для этого UA;
- Пользы не найдено, источник чужой — Disallow/403;
- Источников несколько с разными целями — сегментируйте по IP/ASN вместо блокировки всего UA целиком;
- Заметен высокий параллелизм с одного IP — рассматривайте это как более вероятный признак скрейпинга, чем для медленных однопоточных клиентов;
- Не блокируйте по маске
User-agent: *, чтобы не задеть Googlebot/YandexBot заодно — и не путайте go-http-client с самим Googlebot, это разные и не связанные друг с другом вещи.
8. С кем не путать Go Client
| Бот / сосед | Кластер | UA | Комментарий |
| Googlebot | Поисковый краулер | googlebot | Полноценный поисковый краулер Google — несмотря на созвучие, никак не связан с go-http-client |
| aiohttp Client | Технические клиенты | aiohttp/ | легитимный, тот же принцип «библиотека, не сервис», но для экосистемы Python |
| OkHttp | Технические клиенты | okhttp | легитимный, аналог для Java/Kotlin/Android |
| Java HTTPClient | Технические клиенты | apache-httpclient | легитимный |
| curl | Технические клиенты | curl/ | легитимный, консольная утилита, а не библиотека приложений |
9. Стратегия allow/deny для Go Client
| Ситуация | Действие |
| Источник — собственный Go-сервис или мониторинг | Allow, при необходимости закрыть только /admin /cart /api |
| Несколько разных источников под одним UA, часть полезна | Разделять по IP/ASN, не блокировать весь UA целиком |
| Явно посторонний с высоким параллелизмом запросов | Disallow + запрет в TrafficVeil — риск агрессивного скрейпинга здесь выше среднего |
| Нужен доступ, но пики нерегулярны | Rate-limit на nginx/TrafficVeil |
| Подозрение на подмену UA под другой сервис (например, под Googlebot) | Не доверять строке UA; сверять IP/ASN — go-http-client и Googlebot технически никак не связаны |