Ir al contenido

Archivos Estáticos

Sirva archivos estáticos desde cualquier filesystem usando http.static. Los manejadores estáticos se montan directamente en el servidor y pueden servir SPAs, assets, o uploads de usuarios desde cualquier ruta.

- 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"
CampoTipoDescripción
meta.serverID de RegistroServidor HTTP padre
pathstringRuta de montaje URL (debe comenzar con /)
fsID de RegistroEntrada de filesystem desde donde servir
directorystringSubdirectorio dentro del filesystem
static_options.spaboolModo SPA - servir index para rutas no matcheadas
static_options.indexstringArchivo index (requerido cuando spa=true)
static_options.cachestringValor del header Cache-Control
middleware[]stringCadena de middleware
optionsmapOpciones de middleware (notación de punto)
Los manejadores estáticos pueden montarse en cualquier ruta del servidor. Múltiples manejadores pueden coexistir—monte assets en /static y una SPA en /.

Los archivos estáticos se sirven desde entradas de filesystem. Cualquier tipo de filesystem funciona:

entries:
# Directorio local
- name: public
kind: fs.directory
directory: ./public
# Manejador estático
- name: static
kind: http.static
meta:
server: gateway
path: /static
fs: public

La solicitud /static/css/style.css sirve ./public/css/style.css.

El campo directory selecciona un subdirectorio dentro del filesystem:

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

Las Aplicaciones de Página Única necesitan que todas las rutas sirvan el mismo archivo index para routing del lado del cliente:

- name: spa
kind: http.static
meta:
server: gateway
path: /
fs: app:frontend
static_options:
spa: true
index: index.html
SolicitudRespuesta
/app.jsSirve app.js (archivo existe)
/users/123Sirve index.html (fallback SPA)
/api/dataSirve index.html (fallback SPA)
Cuando spa: true, el archivo index es requerido. Los archivos existentes se sirven directamente; todas las demás rutas retornan el archivo index.

Establezca caching apropiado para diferentes tipos de assets:

entries:
- name: app_fs
kind: fs.directory
directory: ./dist
# Assets versionados - cachear indefinidamente
- name: assets
kind: http.static
meta:
server: gateway
path: /assets
fs: app_fs
directory: assets
static_options:
cache: "public, max-age=31536000, immutable"
# HTML - caché corto, debe 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"

Patrones comunes de caché:

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

Aplique middleware para compresión, CORS, u otro procesamiento:

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

El middleware envuelve el manejador estático en orden—las solicitudes pasan a través de cada middleware antes de llegar al servidor de archivos.

El matching de rutas es basado en prefijo. Un manejador en / captura todas las solicitudes no matcheadas. Use routers para endpoints de API para evitar conflictos.