Hoppa till innehållet
Stackship-dokumentation English

Statiska webbapparAnvändareMaskinöversatt

Routing och cachning

Hur en statisk webbapp besvarar förfrågningar — fallback för single-page-app, 404-sidan, cacheförvalen och deras exakta huvuden, omdirigeringar och svarshuvuden.

Alla dessa inställningar gäller utan att webbplatsen paketeras om: en ändring börjar gälla inom några sekunder.

Hur en förfrågan besvaras

Omdirigeringar kontrolleras före de här stegen.

  1. En sökväg som matchar en fil serverar filen; en sökväg som matchar en katalog serverar katalogens index.html.
  2. Annars, när en fallback för single-page-app är satt, serveras fallback-filen med status 200.
  3. Annars blir svaret 404, med 404-sidan när en sådan är satt.

Förfrågningar efter resursfiler faller aldrig tillbaka: en saknad .js-, .css-, bild- eller typsnittsfil ger 404 i stället för fallback-sidan. Resursfiler är de som slutar på .js, .mjs, .css, .woff, .woff2, .ttf, .otf, .eot, .svg, .png, .jpg, .jpeg, .gif, .webp, .avif, .ico eller .map.

Fallback för single-page-app

Var Inställning Värden
Guiden för att skapa Routing för single-page-app På (standard) serverar /index.html; av ger 404
Konfiguration → Routing Fallback för single-page-app En absolut sökväg som /index.html; tomt stänger av fallbacken
API, CLI navigationFallback Samma som ovan
API, CLI navigationFallbackExclude Sökvägar som fortsätter att ge 404 i stället för att falla tillbaka, till exempel /api/*

404-sida

404-sida (notFoundPage) är en absolut sökväg som /404.html. Den serveras, med status 404, för varje sökväg som inte matchar någon fil och inte faller tillbaka. Tomt serverar webbserverns egen 404-sida.

Fallback-filen och 404-sidan måste finnas i den driftsatta webbplatsen. När en av dem saknas startar inte den ändrade routingen: webbplatsen behåller sin tidigare routing och visar Degraded.

Cacheförval

Förval (API-värde) Hashade resursfiler Andra resursfiler /index.html Allt annat
Hashed assets (recommended) (HashedAssetsImmutable) public, max-age=31536000, immutable inget no-cache inget
Cache all assets (Aggressive) public, max-age=31536000, immutable public, max-age=31536000, immutable no-cache inget
No cache headers (Off) inget inget inget inget

Värdena är huvudet Cache-Control; "inget" betyder att svaret saknar huvudet Cache-Control.

  • En hashad resursfil har en hash på minst åtta bokstäver, siffror, _ eller - mellan två punkter direkt före filändelsen, som app.4f3c2b1a.js. En hash som är fogad med bindestreck, som i index-4f3c2b1a.js, räknas inte.
  • max-age=31536000 är ett år. Med Cache all assets behåller återkommande besökare en ohashad fil som logo.png i upp till ett år, även efter att du driftsatt en ny.
  • no-cache får webbläsare att fråga webbplatsen innan de återanvänder /index.html, så att en driftsättning syns direkt. Det gäller när /index.html begärs direkt, för /, och när den serveras som fallback.

Andra regler

  • Filer och kataloger vars namn börjar med en punkt nekas, utom under /.well-known/.
  • Textsvar — HTML, CSS, JavaScript, JSON, XML, SVG, vanlig text — komprimeras med gzip.
  • Vanlig HTTP omdirigeras till HTTPS.

Omdirigeringar och svarshuvuden

Portalen redigerar inte dessa; sätt dem via API:t eller med stsh swa update. De gäller utan ny driftsättning, som resten av routingen.

redirects är en lista med regler. Ett from utan * matchar just den sökvägen och går före alla andra regler. Bland regler med * gäller det längsta matchande prefixet, oavsett i vilken ordning de står i listan.

Fält Betydelse
from En absolut sökväg; en avslutande * matchar varje sökväg som börjar med den
to En absolut sökväg eller en fullständig http://- eller https://-URL. Adresser som börjar med // avvisas
statusCode 301 (standard), 302, 307 eller 308

headers lägger till ett svarshuvud på matchande sökvägar.

Fält Betydelse
path En absolut sökväg, där en avslutande * matchar ett prefix; /* (standard) matchar allt
name Huvudets namn: bokstäver, siffror och -
value Huvudets värde, på en rad

Sökvägar får innehålla bokstäver, siffror och / . - _ ~ @ :; de får inte innehålla ... Två omdirigeringar som matchar samma sökvägar avvisas.

En omdirigering med * fångar inte alla sökvägar under sitt prefix. Förfrågningar efter resursfiler (filändelserna i Hur en förfrågan besvaras) serveras som filer, eller ger 404, i stället för att omdirigeras medan Cache all assets eller en fallback för single-page-app är satt. Med Hashed assets och ingen fallback gäller det bara hashade resursfiler; andra resursfiler omdirigeras. Sökvägar med ett segment som börjar med en punkt nekas i stället för att omdirigeras.

Se upp

Ett huvud vars path är något annat än /* skickas inte på sidorna under den sökvägen. Det skickas bara på resursfiler under sökvägen — alla medan Cache all assets eller en fallback för single-page-app är satt, bara hashade med Hashed assets och ingen fallback, inga med No cache headers och ingen fallback — och på svaren från omdirigeringar, fallback-filen, 404-sidan och /index.html när deras egen sökväg matchar det. Ett huvud på /admin/* når till exempel inte /admin/index.html eller någon annan sida där. Huvuden på /* skickas på alla svar utom under /.well-known/; använd /* för säkerhetshuvuden som X-Frame-Options eller Content-Security-Policy.

bash
stsh swa update my-site -g my-resource-group \
  --set 'redirects=[{"from":"/blog/*","to":"https://blog.example.com/","statusCode":301}]' \
  --set 'headers=[{"path":"/*","name":"X-Frame-Options","value":"DENY"}]'