Last active
September 10, 2019 20:31
-
-
Save nimaa77/0bafa7afe1170003f0c2d8c32ff08175 to your computer and use it in GitHub Desktop.
Serve gzip and brotli files!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RewriteBase / | |
# Brotli | |
# If the web browser accept brotli encoding… | |
RewriteCond %{HTTP:Accept-encoding} br | |
# …and the web browser is fetching a probably pre-compressed file… | |
RewriteCond %{REQUEST_URI} .*\.(css|html|js) | |
# …and a matching pre-compressed file exists… | |
RewriteCond %{REQUEST_FILENAME}.br -s | |
# …then rewrite the request to deliver the brotli file | |
RewriteRule ^(.+) $1.br | |
# For each file format set the correct mime type (otherwise brotli mime type is returned) and prevent Apache for recompressing the files | |
RewriteRule "\.css\.br$" "-" [T=text/css,E=no-brotli,E=no-gzip] | |
RewriteRule "\.html\.br$" "-" [T=text/html,E=no-brotli,E=no-gzip] | |
RewriteRule "\.js\.br$" "-" [T=application/javascript,E=no-brotli,E=no-gzip] | |
# Gzip | |
# If the web browser accept gzip encoding… | |
RewriteCond %{HTTP:Accept-Encoding} gzip | |
# …and the web browser is fetching a probably pre-compressed file… | |
RewriteCond %{REQUEST_URI} .*\.(css|html|js) | |
# …and a matching pre-compressed file exists… | |
RewriteCond %{REQUEST_FILENAME}.gz -s | |
# …then rewrite the request to deliver the gzip file | |
RewriteRule ^(.+) $1.gz | |
# For each file format set the correct mime type (otherwise gzip mime type is returned) and prevent Apache for recompressing the files | |
RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-brotli,E=no-gzip] | |
RewriteRule "\.html\.gz$" "-" [T=text/html,E=no-brotli,E=no-gzip] | |
RewriteRule "\.js\.gz$" "-" [T=application/javascript,E=no-brotli,E=no-gzip] | |
<FilesMatch "\.(css|html|js)\.br$"> | |
# Prevent mime module to set brazilian language header (because the file ends with .br) | |
RemoveLanguage .br | |
# Set the correct encoding type | |
Header set Content-Encoding br | |
# Force proxies to cache brotli & non-brotli files separately | |
Header append Vary Accept-Encoding | |
</FilesMatch> | |
<FilesMatch "\.(css|html|js)\.gz$"> | |
# Serve correct encoding type | |
Header set Content-Encoding gzip | |
# Force proxies to cache gzip & non-gzip files separately | |
Header append Vary Accept-Encoding | |
</FilesMatch> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import expressStaticGzip from "express-static-gzip" | |
const server = express() | |
server | |
.use( | |
"/static", | |
expressStaticGzip("build/public/static", { | |
enableBrotli: true, | |
orderPreference: ["br", "gz"], | |
setHeaders: function(res) { | |
res.setHeader("Cache-Control", "public, max-age=31536000") | |
}, | |
}) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment