Jelenség
A pipeline-ban nincs response compression middleware (AddResponseCompression / UseResponseCompression egyik hostban sem szerepel).
Amit ez nem érint: a statikus fájlokat a MapStaticAssets() szolgálja ki (HostPipelineExtensions), ami a build során előállított brotli/gzip változatokat adja vissza tartalom-egyeztetéssel — tehát a JS és CSS bundle már tömörítve megy.
Amit érint, az a dinamikus válasz, mert az nem statikus fájl:
- az olvasó API JSON-válaszai (
works, skills, experiences, about, attachments metaadat) — a rich text testekkel ezek a legnagyobb szöveges válaszok az oldalon
- a
SpaShell-lel összeállított HTML (Response.WriteAsync, nem SendFileAsync)
sitemap.xml, sitemap.json, robots.txt
A Cloudflare a látogató felé komprimál, tehát a végfelhasználói hatás korlátozott. Ami valóban nyer vele: az origin → cloudflared hop (ugyanazon a gépen fut, de a szerializálás és a másolás megvan), és minden olyan kérés, ami nem az edge-en keresztül jön (health check, monitor, közvetlen találat). A #58 (edge-cache) után ez tovább csökken, mert a HTML-t az edge adja.
Ezért ez kis nyereségű, kis munkájú tétel — nem sürgős, de egyszerű.
Javaslat
AddResponseCompression brotli + gzip providerrel, EnableForHttps = true, és a UseResponseCompression a pipeline-ban a MapStaticAssets() után, hogy a statikus kiszolgálás előre lefordított változatait ne duplikálja.
- MIME-típusok:
application/json, text/html, application/xml, text/plain. Képeket (image/*) ne — az attachment válaszok már tömörített formátumok, az újratömörítés csak CPU.
- Tömörítési szint: brotli esetén ne a maximum (
SmallestSize) — VPS-en a CPU a szűkebb erőforrás, a Fastest vagy az alapérték a helyes választás dinamikus válaszra.
- Biztonsági megjegyzés: a tömörítés és a titkosítás együtt elvben BREACH-jellegű oldalcsatornát nyit, ha a válasz egyszerre tartalmaz titkot és támadó által befolyásolt szöveget. Itt a publikus API-válaszok nyilvános tartalmat adnak, és nincs süti-alapú session (az admin oldalt a Cloudflare Access védi), tehát ez nem érinti — de a döntést érdemes egy kommentben rögzíteni, mint a projekt többi biztonsági döntését.
- Mérés: a
works válasz mérete előtte/utána, curl -H "Accept-Encoding: br" -w "%{size_download}".
Érintett fájlok
PortfolioCMS.Core/Extensions/CoreStartupExtensions.cs (regisztráció)
PortfolioCMS.Core/Extensions/HostPipelineExtensions.cs (a middleware helye a sorrendben)
PortfolioCMS.Tests/HostPipelineTests.cs
Jelenség
A pipeline-ban nincs response compression middleware (
AddResponseCompression/UseResponseCompressionegyik hostban sem szerepel).Amit ez nem érint: a statikus fájlokat a
MapStaticAssets()szolgálja ki (HostPipelineExtensions), ami a build során előállított brotli/gzip változatokat adja vissza tartalom-egyeztetéssel — tehát a JS és CSS bundle már tömörítve megy.Amit érint, az a dinamikus válasz, mert az nem statikus fájl:
works,skills,experiences,about,attachmentsmetaadat) — a rich text testekkel ezek a legnagyobb szöveges válaszok az oldalonSpaShell-lel összeállított HTML (Response.WriteAsync, nemSendFileAsync)sitemap.xml,sitemap.json,robots.txtA Cloudflare a látogató felé komprimál, tehát a végfelhasználói hatás korlátozott. Ami valóban nyer vele: az origin → cloudflared hop (ugyanazon a gépen fut, de a szerializálás és a másolás megvan), és minden olyan kérés, ami nem az edge-en keresztül jön (health check, monitor, közvetlen találat). A #58 (edge-cache) után ez tovább csökken, mert a HTML-t az edge adja.
Ezért ez kis nyereségű, kis munkájú tétel — nem sürgős, de egyszerű.
Javaslat
AddResponseCompressionbrotli + gzip providerrel,EnableForHttps = true, és aUseResponseCompressiona pipeline-ban aMapStaticAssets()után, hogy a statikus kiszolgálás előre lefordított változatait ne duplikálja.application/json,text/html,application/xml,text/plain. Képeket (image/*) ne — az attachment válaszok már tömörített formátumok, az újratömörítés csak CPU.SmallestSize) — VPS-en a CPU a szűkebb erőforrás, aFastestvagy az alapérték a helyes választás dinamikus válaszra.worksválasz mérete előtte/utána,curl -H "Accept-Encoding: br" -w "%{size_download}".Érintett fájlok
PortfolioCMS.Core/Extensions/CoreStartupExtensions.cs(regisztráció)PortfolioCMS.Core/Extensions/HostPipelineExtensions.cs(a middleware helye a sorrendben)PortfolioCMS.Tests/HostPipelineTests.cs