Перейти к содержимому

Статические файлы

Раздача статических файлов из любой файловой системы через http.static. Обработчики статики монтируются напрямую на сервер и могут раздавать SPA, ассеты или пользовательские загрузки с любого пути.

- name: static
kind: http.static
meta:
server: gateway
path: /
fs: app:public
directory: dist
static_options:
spa: true
index: index.html
cache: "public, max-age=3600"
ПолеТипОписание
meta.serverRegistry IDРодительский HTTP-сервер
pathstringURL-путь монтирования (начинается с /)
fsRegistry IDЗапись файловой системы для раздачи
directorystringПоддиректория внутри файловой системы
static_options.spaboolSPA-режим — отдавать index для несопоставленных путей
static_options.indexstringIndex-файл (обязателен при spa=true)
static_options.cachestringЗначение заголовка Cache-Control
middleware[]stringЦепочка middleware
optionsmapОпции middleware (точечная нотация)
Обработчики статики можно монтировать на любой путь сервера. Несколько обработчиков могут сосуществовать — монтируйте ассеты на /static, а SPA на /.

Статические файлы раздаются из записей файловых систем. Подходит любой тип:

entries:
# Локальная директория
- name: public
kind: fs.directory
directory: ./public
# Обработчик статики
- name: static
kind: http.static
meta:
server: gateway
path: /static
fs: public

Запрос /static/css/style.css отдаёт ./public/css/style.css.

Поле directory выбирает поддиректорию внутри файловой системы:

- name: docs
kind: http.static
meta:
server: gateway
path: /docs
fs: app:content
directory: documentation/html

Single Page Applications требуют, чтобы все маршруты отдавали один index-файл для клиентской маршрутизации:

- name: spa
kind: http.static
meta:
server: gateway
path: /
fs: app:frontend
static_options:
spa: true
index: index.html
ЗапросОтвет
/app.jsОтдаёт app.js (файл существует)
/users/123Отдаёт index.html (SPA fallback)
/api/dataОтдаёт index.html (SPA fallback)
При spa: true файл index обязателен. Существующие файлы отдаются напрямую; все остальные пути возвращают index-файл.

Настройте кеширование для разных типов ассетов:

entries:
- name: app_fs
kind: fs.directory
directory: ./dist
# Версионированные ассеты — кешировать навсегда
- name: assets
kind: http.static
meta:
server: gateway
path: /assets
fs: app_fs
directory: assets
static_options:
cache: "public, max-age=31536000, immutable"
# HTML — короткий кеш, обязательная ревалидация
- name: app
kind: http.static
meta:
server: gateway
path: /
fs: app_fs
static_options:
spa: true
index: index.html
cache: "public, max-age=0, must-revalidate"

Типовые паттерны кеширования:

  • Версионированные ассеты: public, max-age=31536000, immutable
  • HTML/index: public, max-age=0, must-revalidate
  • Пользовательские загрузки: private, max-age=3600

Применение middleware для сжатия, CORS и другой обработки:

- name: static
kind: http.static
meta:
server: gateway
path: /
fs: app:public
middleware:
- compress
- cors
options:
compress.level: "best"
cors.allow.origins: "*"

Middleware оборачивают обработчик статики по порядку — запросы проходят через каждый middleware до файлового сервера.

Сопоставление путей работает по префиксу. Обработчик на / перехватывает все несопоставленные запросы. Используйте роутеры для API-эндпоинтов, чтобы избежать конфликтов.