Browser
|
v
Cloudflare route
|
v
src/index.js
| host / admin / SEO / response policy
v
src/worker.js
| \
| +--> ASSETS (public/)
|
+--> D1 (DB)
+--> publicerad termstate
+--> submission/review-state
wrangler.jsonc sätter assets.run_worker_first=true. Det är nödvändigt eftersom asset-serving annars kan svara innan Worker-koden hinner tillämpa:
Att ändra till asset-first är därför en arkitektur- och säkerhetsändring.
Den publika canonical hosten är <din-host>. IDN-aliaset finns som separat route och ska canonicaliseras till huvudhosten innan normal rendering.
Publik termdata läses från D1 via API. Frontend är presentation och ska inte bära en separat kopia som kan drifta från databasen.
POST /api/submit representerar publik ingress för förslag.
Flödet ska:
Adminytan arbetar mot review-state. Godkännande/publicering är explicita stateövergångar. Det gör att:
Publik applikationslogik och adminlogik ligger i separata first-party assets (/app.js respektive /admin.js) i stället för inline-script. Response-CSP tillåter därför inte generell inline-JavaScript. script-src får en unik nonce per response; Cloudflare kan då bära samma nonce på sin edge-injicerade JavaScript Detection-snippet utan att 'unsafe-inline' återinförs. Turnstile är den enda externa script/frame-originen som explicit tillåts och är avgränsad till https://challenges.cloudflare.com.
Publika indexerbara sidor får canonical/robots metadata. Admin- och andra icke-publika ytor ska inte bli indexerbara eller cacheas som allmän publik data.
Vid fel i termvisning:
Vid submissionsproblem: