ws-resources.json
ws-resources.json es un archivo opcional en la raíz de la carpeta del sitio que lo configura.
El propio archivo no se publica como parte del sitio.
| Campo | Tipo | Qué hace |
|---|---|---|
headers | patrón glob → { cabecera: valor } | Cabeceras HTTP de los archivos que casan. |
routes | patrón → ruta de un recurso | Rutas que sirven otro recurso (para aplicaciones de una sola página). |
redirects | patrón de ruta → { location, status_code } | Redirecciones HTTP. |
metadata | objeto | link, image_url, description, project_url, creator: se muestran con el Display del Site. |
site_name | texto | Nombre del Site. |
object_id | 0x… | El Site publicado. Lo escribe desplegar; con él, desplegar actualiza ese sitio. |
ignore | lista de patrones glob | Archivos que no se publican. |
Un campo desconocido es un error (por ejemplo, site-name en lugar de site_name).
Ejemplo
El sitio de ejemplo del proyecto usa todos los campos salvo object_id:
{
"site_name": "Sitio de ejemplo en IOTA",
"metadata": {
"description": "Un sitio estático en la red de almacenamiento propia de IOTA, publicado desde una wallet IOTA.",
"creator": "IOTA Storage"
},
"headers": {
"/estilo.css": { "Cache-Control": "public, max-age=3600" },
"/*.svg": { "Cache-Control": "public, max-age=86400" }
},
"routes": {
"/app/*": "/index.html"
},
"redirects": {
"/antiguo": { "location": "/docs/", "status_code": 301 },
"/blog/**": { "location": "/docs/", "status_code": 302 }
},
"ignore": ["/borradores/*"]
}
Esta documentación se publica también como sitio, con este archivo:
{
"site_name": "IOTA Storage docs",
"headers": {
"/assets/**": {
"cache-control": "public, max-age=31536000, immutable"
},
"/es/assets/**": {
"cache-control": "public, max-age=31536000, immutable"
}
}
}
headers
Cada clave es un patrón glob sobre la ruta del archivo (que empieza por /); cada valor es un
objeto con cabeceras HTTP y sus valores, todo como texto.
- Si varios patrones casan con un archivo, gana el que tiene más segmentos de ruta. Las cabeceras de patrones distintos no se mezclan.
- Los nombres de las cabeceras se guardan en minúsculas.
- Cada recurso lleva además
content-encoding: identityy uncontent-typesegún la extensión del archivo (una tabla con los tipos habituales de la web,wasmymdincluidos), salvo que el patrón que casa los defina. Una extensión desconocida llevaapplication/octet-stream. Elcontent-typeno llevacharset; ponlo tú si lo necesitas.
Sintaxis de los patrones:
| Patrón | Casa con |
|---|---|
*, ** | Cualquier secuencia de caracteres, también con /. ** tiene que ser un segmento entero de la ruta (/assets/**). |
? | Un carácter. |
[abc], [a-z], [!abc] | Un carácter de la clase, o que no sea de la clase. |
Así, /*.svg casa con /logo.svg y también con /img/iconos/logo.svg.
routes
Cada clave es un patrón de ruta y cada valor, la ruta de un recurso del sitio. Cuando una ruta no
tiene recurso (ni un index.html debajo, ni una redirección), el portal sirve el recurso de la
ruta del sitio que case.
*vale por cualquier secuencia de caracteres, y gana el patrón más largo que case.- Un patrón puede tener como mucho dos
*y ninguno de( ) [ ] { } + ? ^ $ | \. - El destino tiene que ser un archivo del sitio; si no, la publicación falla.
El uso típico es una aplicación de una sola página: "/app/*": "/index.html" sirve /index.html
para /app/ajustes, /app/usuarios/42, etc.
redirects
Cada clave es un patrón de ruta, y cada valor, un objeto con location (una ruta del sitio o una
URL completa) y status_code, que puede ser 301, 302, 303, 307 o 308.
- Los patrones son globs por segmentos:
*casa dentro de un segmento y no cruza/;**casa con cualquier número de segmentos. Un segmento puede tener como mucho un*, y un patrón, como mucho un**. - Si casan varios patrones, gana el más específico: más caracteres literales y, si empatan, menos
*. - Las redirecciones solo se aplican a rutas que no tienen recurso. Una redirección a la misma ruta da un error 508.
Por ejemplo:
"redirects": {
"/pagina-antigua": { "location": "/index.html", "status_code": 308 },
"/documentacion": { "location": "https://docs.iotastorage.com/es/", "status_code": 301 },
"/imagenes/**/*": { "location": "/logo.svg", "status_code": 302 }
}
metadata y site_name
metadata solo admite link, image_url, description, project_url y creator, como texto.
Se guardan en el Site y se muestran con su Display, por ejemplo en wallets y exploradores.
site_name es el nombre del Site. Si falta, un sitio ya publicado conserva su nombre y uno nuevo
recibe un nombre por defecto.
object_id
El ID del Site publicado. El comando desplegar de la CLI lo escribe tras la primera
publicación y lo usa la vez siguiente para actualizar ese mismo sitio en lugar de crear otro.
Guárdalo junto con los archivos del sitio si despliegas desde varias máquinas.
ignore
Una lista de patrones glob (la misma sintaxis que en headers). Los archivos que casan no se
publican. Por ejemplo:
"ignore": ["/private", "/private/*", "/secret.txt"]
Archivos
- Se publican todos los archivos de la carpeta, también los que empiezan por punto, salvo
ws-resources.jsony los ignorados. - Una ruta puede tener hasta unos 2 KB.
- Todos los archivos del sitio son públicos, como cualquier blob.