web-dev-qa-db-fra.com

Comment dois-je référencer les versions précompressées de fichiers statiques hébergés avec S3 d'Amazon?

J'ai un site Web qui sert des ressources statiques (CSS, JavaScript, images) directement à partir du S3 d'Amazon. Autant que je sache, S3 ne supporte pas gzip même lorsque les navigateurs l'acceptent.

Quels problèmes peuvent survenir si la page HTML contient des liens vers style_v1.gz.css et script_v1.gz.js pré-compressés (au lieu de sans gz) lorsque l'application voit gzip dans le Accept-Encoding request headers?

Et dois-je définir des en-têtes spéciaux sur ces fichiers dans S3? (autre que l'évident Content-Encoding: gzip)

5
Evgeny

Pourquoi voulez-vous gérer ces actifs statiques avec une extension gz?

Bien qu’ils soient l’indicateur le plus utilisé depuis longtemps, les extensions de fichier sont en réalité un mécanisme inférieur et imprécis pour communiquer un type MIME en premier lieu: idéalement , ressources Web. devrait être totalement agnostique pour les extensions de fichiers et ne communiquer que leur contenu au moyen de en-têtes HTTP comme Content-Type et Content-Encoding (ce qui facilite d'ailleurs le maintien d'un espace URI - Les URI sympas ne changent pas ;)

Certes, cela n’a pas fonctionné aux débuts d’Internet et pourrait ne pas fonctionner avec quelques clients inférieurs (certains serveurs mandataires et mobiles plus faibles semblent en souffrir), mais à moins d’identifier clairement une partie pertinente de votre le public étant affecté par cette limitation (et le pousser à mettre son navigateur à niveau n’est finalement pas une option), vous devriez probablement commencer à simplement faire confiance à HTTP en-têtes utilisés.

Par conséquent, je servirais simplement les actifs statiques précompressés avec le Content-Encoding et (pour répondre à votre dernière question) les en-têtes tout aussi importants Content-Type (sinon les clients devraient en effet déduire le type de média à partir de l'extension et/ou du contenu lui-même), mais sans la gz extension, comme indiqué dans la réponse de Skyler Johnson à Servir du code CSS et JavaScript gzippé à partir d'Amazon CloudFront via S .

Évidemment, une fois que vous utiliserez Content-Type et Content-Encoding, cela devrait également fonctionner, si vous le serviez avec gz.css (ou aucune extension du tout), cependant, Comme indiqué ci-dessus, cela pourrait induire en erreur les clients en aval, dans la mesure où ils ne doivent plus nécessairement traiter un fichier encodé en gzip (un proxy pourrait déjà l'avoir déjà décodé).

6
Steffen Opel