Vorkomprimierte Dateien doppelt komprimiert
- Matt
Das Blazor-WebAssembly-Frontend von DropicIsland bringt seine Dateien schon vorkomprimiert mit, als .br und .gz. Per .htaccess liefert Apache dann app.css.br aus, wenn der Browser Brotli kann, und setzt Content-Encoding: br. Nach dem ersten Deploy blieb die Seite trotzdem leer und ohne Styles.
Der Grund: Der Strato-Webspace hatte mod_deflate für CSS und JavaScript aktiv. Apache nahm die bereits mit Brotli komprimierte Datei und packte sie zusätzlich in Gzip, sobald der Browser auch Gzip akzeptierte. Also immer. Der Browser entpackte einmal und hielt Brotli-Bytes für CSS.
Abhilfe schafft es, die Kompression für die vorkomprimierten Dateien abzuschalten:
<FilesMatch "\.(br|gz)$">
SetEnv no-gzip 1
SetEnv no-brotli 1
</FilesMatch>
Der Haken war die Fehlersuche. Mit curl -H "Accept-Encoding: br" sah alles richtig aus, weil der doppelte Effekt nur auftritt, wenn der Client auch Gzip anbietet. Seitdem testet der Deploy mit der vollen Kopfzeile eines Browsers, gzip, deflate, br, und prüft, ob echter Inhalt zurückkommt. Außerdem: HTML lasse ich gar nicht mehr umschreiben, nur bekannte Asset-Typen. Wie man die Kompression gezielt abschaltet, beschreibt die Dokumentation von mod_deflate.