Pular para o conteúdo

Arquivos Estáticos

Serve arquivos estáticos de qualquer sistema de arquivos usando http.static. Handlers estáticos montam diretamente no servidor e podem servir SPAs, assets ou uploads de usuário de qualquer caminho.

- 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"
CampoTipoDescrição
meta.serverID do RegistroServidor HTTP pai
pathstringCaminho de montagem URL (deve começar com /)
fsID do RegistroEntrada de sistema de arquivos para servir
directorystringSubdiretório dentro do sistema de arquivos
static_options.spaboolModo SPA - serve index para caminhos não correspondidos
static_options.indexstringArquivo index (obrigatório quando spa=true)
static_options.cachestringValor do header Cache-Control
middleware[]stringCadeia de middleware
optionsmapOpções de middleware (notação de ponto)
Handlers estáticos podem ser montados em qualquer caminho no servidor. Múltiplos handlers podem coexistir - monte assets em /static e uma SPA em /.

Arquivos estáticos são servidos de entradas de sistema de arquivos. Qualquer tipo de sistema de arquivos funciona:

entries:
# Diretório local
- name: public
kind: fs.directory
directory: ./public
# Handler estático
- name: static
kind: http.static
meta:
server: gateway
path: /static
fs: public

Requisição /static/css/style.css serve ./public/css/style.css.

O campo directory seleciona um subdiretório dentro do sistema de arquivos:

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

Single Page Applications precisam que todas as rotas sirvam o mesmo arquivo index para roteamento client-side:

- name: spa
kind: http.static
meta:
server: gateway
path: /
fs: app:frontend
static_options:
spa: true
index: index.html
RequisiçãoResposta
/app.jsServe app.js (arquivo existe)
/users/123Serve index.html (fallback SPA)
/api/dataServe index.html (fallback SPA)
Quando spa: true, o arquivo index é obrigatório. Arquivos existentes são servidos diretamente; todos os outros caminhos retornam o arquivo index.

Defina cache apropriado para diferentes tipos de assets:

entries:
- name: app_fs
kind: fs.directory
directory: ./dist
# Assets versionados - cache para sempre
- name: assets
kind: http.static
meta:
server: gateway
path: /assets
fs: app_fs
directory: assets
static_options:
cache: "public, max-age=31536000, immutable"
# HTML - cache curto, deve revalidar
- 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"

Padrões comuns de cache:

  • Assets versionados: public, max-age=31536000, immutable
  • HTML/index: public, max-age=0, must-revalidate
  • Uploads de usuário: private, max-age=3600

Aplique middleware para compressão, CORS ou outro processamento:

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

Middleware encapsula o handler estático em ordem - requisições passam por cada middleware antes de alcançar o servidor de arquivos.

Match de caminho é baseado em prefixo. Um handler em / captura todas as requisições não correspondidas. Use roteadores para endpoints de API para evitar conflitos.