Sitios
Un sitio es un sitio web estático guardado en IOTA Storage, con su índice en un objeto de tu wallet IOTA y accesible por un subdominio o por un nombre de IOTA Names.
- Archivos. Cada archivo del sitio es un patch de un quilt: un blob tuyo, pagado en IOTA, como cualquier otro.
- Índice. Un objeto
Sitede tu wallet (paquetesitios) tiene unResourcepor ruta, con las cabeceras HTTP del archivo, el blob ID de su quilt, el patch (cabecerax-quilt-patch-internal-id) y su SHA-256. - Configuración. Un archivo
ws-resources.jsonopcional en la carpeta del sitio define cabeceras, rutas, redirecciones, el nombre del sitio y sus metadatos.
Los sitios se publican y se gestionan con la app o con la CLI de referencia.
Cómo se sirve un sitio
El portal sirve cualquier Site del paquete sitios en dos tipos de dirección:
| Dirección | Ejemplo |
|---|---|
https://<ID del sitio en base36>.iotastorage.com/<ruta> | El ID del Site (0x…) escrito en base36. |
https://<nombre>.iotastorage.com/<ruta> | https://blog.ana.iotastorage.com/ sirve el sitio al que apunta el nombre de IOTA Names blog.ana.iota. Ver IOTA Names. |
La forma en base36 son los 32 bytes del ID del objeto escritos en base 36 (cada byte cero inicial
es un 0). La app muestra la URL de cada sitio, y la CLI convierte en los dos sentidos con
node sitio.mjs convertir.
Cómo resuelve el portal una ruta
En cada petición, el portal lee de IOTA el Site y el recurso de la ruta, en una sola consulta, y
prueba en este orden:
- El recurso de la ruta.
/es/index.html, y se quita la barra final. <ruta>/index.html, si la ruta no tiene extensión. Así,/docs/y/docssirven/docs/index.html.- Una redirección del sitio que case con la ruta: responde con su estado (301, 302, 303, 307
o 308) y la cabecera
Location. - Una ruta del sitio que case con la ruta: sirve el recurso al que lleva.
- El
/404.htmldel sitio, con estado 404. - Si no, la página «no encontrada» del propio portal, con estado 404.
Los bytes salen del aggregator: el patch del quilt, por su quilt patch ID. Antes de servirlos, el
portal comprueba que su SHA-256 es el que declara el Site en IOTA.
Respuestas
Un recurso servido lleva las cabeceras guardadas en su Resource (las que no son válidas en HTTP
no se envían) y además:
x-resource-iota-object-idyx-resource-iota-object-version: el campo dinámico que guarda el recurso;x-sitio-iota: el ID delSite.
El portal solo atiende GET y HEAD. Errores:
| Estado | Cuándo |
|---|---|
| 400 | La dirección o la ruta no son válidas. |
| 404 | No hay ningún sitio en esa dirección; el nombre no existe, caducó o no lleva a un sitio; la página no existe; o los datos del archivo ya no están disponibles (caducaron). |
| 405 | Un método que no es GET ni HEAD. |
| 422 | Los bytes no tienen el SHA-256 que el sitio declara en IOTA. |
| 503 | El nodo de IOTA o el aggregator no respondieron. Prueba otra vez más tarde. |
| 508 | Una redirección del sitio lleva a la misma ruta. |
Quilts y costes
- Los archivos que hay que subir se agrupan en quilts, de menor a mayor. Con 100 shards, un quilt admite hasta 66 archivos. Como esta red tiene pocas columnas por quilt, un quilt de más de 1 MiB que saldría más de 4 veces más grande que sus archivos se parte en dos.
- Cada recurso es un campo dinámico del
Sitecon su depósito de almacenamiento: unos 0,005 IOTA por archivo, casi todo depósito, que vuelve a ti al destruir el sitio. - En testnet, publicar el sitio de ejemplo del proyecto (6 archivos) cuesta unos 0,035 IOTA, casi todo depósito, más unos miles de nanos de almacenamiento.
Caducidad
Un sitio está disponible mientras lo estén los blobs de sus archivos. Cada compra cubre como mucho 53 épocas (53 días en testnet). Renueva el sitio antes de que caduque: ver Actualizar, renovar y destruir. Cuando un archivo ha caducado, el portal responde 404 con una página que dice que el contenido ya no está disponible.