Även om inte S3 automatiskt skickar gzippade versioner av dina filer när klienten stöder gzip så kan du självklart lagra gzippade filer på S3. Du kan alltså komprimera t.ex. din css-fil lokalt och sedan ladda upp den till S3. Såhär gzippar du en fil i linux:
gzip -c plain_text.txt > compressed.txt.gz
Detta löser dock inte problemet helt för alla klienter stöder inte gzip och kommer alltså inte kunna läsa din komprimerade css-fil och därmed inte rendera din sajt korrekt.
Den gyllene medelvägen blir att lagra både en okomprimerad och en komprimerad version på S3 med bara en liten skillnad i namnet, t.ex. style.css och style.gz.css.
Sedan kan man med php eller något annat serverspråk enkelt avgöra om klienten har stöd för gzip och i så fall välja att ladda den gzippade versionen. Här är ett exempel på hur man tar reda på detta i php:
<?php $gz = (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false)? 'gz.' : ''; ?> <link rel="stylesheet" type="text/css" href="http://s.example.com/style.<?=$gz?>css" />
När du laddar upp den gzippade filen till S3 bör den ha "Content-Encoding: gzip" i sin header. Annars kommer inte webbläsarna förstå att innehållet är gzippat utan försöka läsa det som vanlig text.
På Pusha minskade vi på detta sätt storleken på vår css med 78% och javascriptet med nästan lika mycket.