HTTP Referrer ограничения являются одним из ключевых механизмов защиты API-ключей при работе с браузерными приложениями, использующими Google Maps JavaScript API в составе Google Maps Platform. Их основная задача — гарантировать, что ключ используется только с доверенных веб-сайтов, а не на сторонних или вредоносных ресурсах.
HTTP Referrer (или Referer) — это заголовок, который
браузер автоматически добавляет к запросам, отправляемым с веб-страницы.
Он содержит адрес страницы, с которой был инициирован запрос.
В контексте Google Maps JavaScript API этот механизм используется для проверки источника загрузки API:
Ключевая идея: API-ключ становится действительным только в пределах заданных доменов.
В Google Maps Platform доступны разные стратегии ограничения ключей:
Для Google Maps JavaScript API используется именно HTTP referrer ограничение, поскольку выполнение происходит в клиентском окружении.
Ограничения задаются в панели управления API-ключами.
Типичная конфигурация включает список допустимых шаблонов:
https://example.com/*
https://*.example.com/*
http://localhost/*
http://127.0.0.1/*
Каждая строка — это шаблон, по которому Google определяет, разрешён ли запрос.
HTTP referrer поддерживает несколько уровней гибкости:
https://example.com/*
Разрешает использование ключа только на основном домене.
https://*.example.com/*
Позволяет использовать API на любых поддоменах:
http://localhost/*
http://127.0.0.1/*
Используется для тестирования без публикации проекта.
Важно учитывать, что:
http и https считаются разными
источникамиhttps, http будет
отклонёнПри каждом запросе к Maps API происходит следующая последовательность:
Браузер отправляет запрос с API-ключом
Сервер Google получает:
Система проверяет совпадение с разрешёнными шаблонами
В случае несоответствия возвращается ошибка:
RefererNotAllowedMapError
или
ApiNotActivatedMapError
(в зависимости от конфигурации проекта)
Некорректные referrer-ограничения приводят к частым проблемам:
Типичная ошибка:
This API project is not authorized to use this API key.
Wildcard * работает только в пределах одной
DNS-структуры.
Пример корректного использования:
https://*.example.com/*
Но важно:
* в середине доменного имени
произвольноДопустимо:
https://*.site.com/*Недопустимо:
https://sub.*.com/*HTTP referrer ограничения применяются в браузерных сценариях, тогда как IP restrictions используются для серверных API.
| Тип ограничения | Где используется | Пример |
|---|---|---|
| HTTP referrer | браузер | Maps JS API |
| IP address | backend / server | Geocoding API |
| Android apps | мобильные ключи | Maps SDK |
| iOS apps | мобильные ключи | Maps SDK |
Использование неправильного типа ограничения приводит к полной блокировке ключа.
Поскольку JavaScript выполняется на клиенте, API-ключ неизбежно доступен пользователю. HTTP referrer ограничения не скрывают ключ, но ограничивают его применение.
Основные принципы защиты:
<script
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
async
defer
></script>
Если ключ имеет корректные HTTP referrer ограничения, карта загрузится только на разрешённом домене.
В одностраничных приложениях (SPA) referrer обычно совпадает с основным доменом приложения. Однако возможны нюансы:
Особенно важно учитывать:
Наиболее частые проблемы:
1. Пропущенный протокол
example.com/* ❌
https://example.com/* ✔
2. Отсутствие поддоменов
https://example.com/* (не работает для www.example.com)
3. Несоответствие localhost
http://localhost:3000/* (порт может быть критичен)
В некоторых случаях необходимо явно учитывать порт разработки.
При отладке полезно:
Ошибки referrer почти всегда связаны не с API, а с несоответствием доменных шаблонов.
Некоторые сценарии могут приводить к отсутствию заголовка:
file://В таких случаях запросы могут быть отклонены независимо от корректности ключа.