HTTPS требования

MapLibre GL JS работает в рамках браузерной модели безопасности, где загрузка данных, отрисовка тайлов и доступ к аппаратному ускорению строго завязаны на понятие secure context. В результате HTTPS становится не просто рекомендацией, а фактическим условием корректной работы большинства сценариев, связанных с картами, стилями и внешними источниками данных.

Современные браузеры блокируют или ограничивают множество операций, если страница не считается безопасной. MapLibre GL JS активно использует сетевые запросы для загрузки векторных и растровых тайлов, шрифтов (glyphs), спрайтов, а также JSON-стилей. Все эти ресурсы подчиняются политике mixed content и правилам secure context.


Браузер считает страницу безопасным контекстом, если она загружена по HTTPS или запущена с localhost. Только в таком окружении доступны ключевые API:

  • WebGL в полной функциональности без ограничений
  • Geolocation API
  • Service Workers
  • Clipboard API (в современных браузерах)
  • некоторые возможности кеширования и фоновой загрузки

MapLibre GL JS использует WebGL как основной механизм рендеринга. Это означает, что сама библиотека технически может инициализироваться в небезопасном контексте, но при попытке загрузки внешних ресурсов поведение начинает деградировать или полностью ломается.


Блокировка mixed content и влияние на карты

Если страница загружена по HTTPS, а ресурсы (тайлы, стили, шрифты) запрашиваются по HTTP, браузер применяет политику блокировки mixed content.

Различают два типа:

  • Active mixed content — скрипты, WebSocket, XHR. Блокируются полностью
  • Passive mixed content — изображения, видео, аудио. Иногда разрешаются, но часто с предупреждениями

Для MapLibre GL JS критичны оба типа, поскольку карта опирается на:

  • vector tiles (.pbf)
  • raster tiles (.png, .jpg)
  • sprite sheets
  • glyph ranges
  • style JSON

Если хотя бы один из этих ресурсов загружается по HTTP на HTTPS-странице, результатом становится:

  • частично пустая карта
  • отсутствующие слои
  • ошибки загрузки источников
  • сбои рендеринга WebGL слоя

Источники данных и обязательность HTTPS

MapLibre GL JS использует объект source в стиле, где задаются URL-адреса:

{
  "type": "vector",
  "tiles": ["https://tiles.example.com/{z}/{x}/{y}.pbf"]
}

или

{
  "type": "raster",
  "tiles": ["https://tiles.example.com/{z}/{x}/{y}.png"]
}

Все URL-адреса источников должны соответствовать требованиям:

  • использовать HTTPS при загрузке страницы через HTTPS
  • поддерживать CORS-заголовки
  • отдавать корректные MIME-типы

Даже если браузер не блокирует HTTP напрямую, MapLibre GL JS может столкнуться с отказом в доступе к ответу из-за CORS preflight или политики opaque responses.


CORS как обязательное дополнение к HTTPS

HTTPS решает только транспортную безопасность. Для работы MapLibre GL JS этого недостаточно, поскольку библиотека выполняет запросы к сторонним доменам.

Каждый сервер тайлов должен возвращать:

  • Access-Control-Allow-Origin: * или конкретный домен
  • корректную обработку OPTIONS-запросов (preflight)
  • разрешение заголовков для шрифтов и спрайтов

Особенно критично это для:

  • glyph endpoints (.pbf font stacks)
  • sprite JSON и PNG
  • vector tile endpoints

Без CORS даже HTTPS-ресурс будет недоступен для WebGL-рендеринга, так как браузер не позволит передать бинарные данные в графический контекст.


HTTPS и загрузка стилей MapLibre

Стиль MapLibre GL JS — это JSON-документ, который может быть загружен через:

map.setStyle("https://example.com/style.json");

или встроен локально.

При загрузке стиля по HTTP на HTTPS-странице браузер блокирует запрос. Это приводит к полной невозможности инициализации карты, так как стиль является корневой точкой графа зависимостей:

  • style → sources → tiles
  • style → sprites
  • style → glyphs

Если стиль не загружен, MapLibre GL JS не может построить render tree.


WebGL ограничения и secure context

WebGL сам по себе доступен и в HTTP-контексте, но в связке с сетевыми ресурсами возникают ограничения:

  • текстуры из небезопасных источников могут быть заблокированы
  • tainted canvases становятся недоступными для чтения
  • экспорт canvas (toDataURL, getImageData) может быть ограничен
  • некоторые драйверы GPU требуют secure context для оптимизаций

MapLibre GL JS активно загружает тайлы как текстуры WebGL, поэтому любые ограничения приводят к визуальным артефактам или ошибкам компиляции шейдеров при загрузке ресурсов.


Localhost и особенности разработки

Исключением из HTTPS-правил является localhost.

Браузеры считают следующие источники безопасными:

  • http://localhost
  • http://127.0.0.1
  • http://[::1]

Это позволяет разрабатывать MapLibre GL JS приложения без HTTPS, но с важными ограничениями:

  • поведение может отличаться от production
  • некоторые API работают иначе (особенно geolocation)
  • CORS политики могут быть мягче

При переносе в production любые HTTP-зависимости становятся критическими ошибками.


Self-hosted tiles и требования к серверу

При самостоятельном хостинге тайловых серверов (например, vector tiles из собственного пайплайна) HTTPS становится обязательным для корректной интеграции в MapLibre GL JS.

Типичная архитектура:

  • CDN или tile server (HTTPS)
  • style server (HTTPS)
  • sprite/glyph server (HTTPS)

Ключевые требования:

  • TLS сертификаты без ошибок цепочки доверия
  • поддержка HTTP/2 для ускорения тайлов
  • корректные cache-control headers
  • отсутствие редиректов HTTP → HTTPS (лучше сразу HTTPS)

Редиректы могут замедлять загрузку тайлов, так как MapLibre GL JS делает большое количество параллельных запросов при движении карты.


Service Workers и кэширование карт

В HTTPS-контексте становится доступным Service Worker слой, который часто используется для:

  • кэширования тайлов
  • офлайн-карт
  • предзагрузки регионов
  • сокращения сетевого трафика

MapLibre GL JS не требует Service Worker напрямую, но в реальных приложениях он критически влияет на производительность.

Без HTTPS Service Worker недоступен, что лишает приложение возможности:

  • офлайн-навигации
  • устойчивой работы при слабом соединении
  • локального кеширования vector tiles

Ошибки, возникающие при нарушении HTTPS требований

На практике нарушения HTTPS-правил приводят к типовым ошибкам:

  • Mixed Content: The page was loaded over HTTPS but requested an insecure resource
  • Blocked by CORS policy
  • Failed to load resource: net::ERR_BLOCKED_BY_CLIENT
  • пустой canvas без ошибок в консоли MapLibre
  • частично загруженные слои без геометрии

Особенно коварны ситуации, когда карта загружается, но отдельные слои остаются пустыми из-за блокировки glyph или sprite endpoint.


Влияние HTTPS на производительность загрузки тайлов

HTTPS не только ограничение, но и фактор производительности:

  • HTTP/2 multiplexing ускоряет загрузку множества тайлов
  • TLS session resumption снижает накладные расходы
  • современные CDN оптимизируют delivery именно под HTTPS

MapLibre GL JS выполняет десятки и сотни параллельных запросов при перемещении карты, поэтому стабильное HTTPS-соединение напрямую влияет на плавность взаимодействия.


Практика построения корректной архитектуры

Корректная конфигурация MapLibre GL JS-проекта предполагает:

  • единый HTTPS-домен или согласованный набор доменов
  • отсутствие HTTP-ресурсов в style.json
  • строгую настройку CORS на tile/glyph/sprite серверах
  • использование CDN с TLS 1.2+ или 1.3
  • минимизацию редиректов и промежуточных прокси

Такая архитектура обеспечивает предсказуемую загрузку всех слоёв карты и стабильную работу WebGL-рендеринга даже при высокой нагрузке и частом взаимодействии пользователя с картой.