Lorsque j'utilise mon application Rails pour servir directement mes ressources via la pile Cedar de Heroku (c'est-à-dire PAS via un CDN), elles sont gzipées automatiquement. (Voir mon previous question sur pourquoi je suis confus à ce sujet)Accepter les en-têtes sur les actifs de Cloudfront à partir de Rails 3.0.x sur Heroku Cedar
Maintenant, j'essaie de configurer Cloudfront pour servir ces actifs à la place, et idéalement, je voudrais qu'ils soient aussi gzip'd. D'après ce que j'ai lu, je pensais que Cloudfront transmettrait les en-têtes Accept
à mon application, donc ils devraient être servis gzip s'ils sont supportés (comme ils le sont lorsque vous faites une demande directe à l'actif sur heroku). Mais ce n'est pas le cas. Les en-têtes d'actifs finissent par ressembler à ceci:
Age:510
Connection:keep-alive
Content-Length:178045
Content-Type:text/css
Date:Sun, 08 Jan 2012 18:55:13 GMT
Last-Modified:Sun, 08 Jan 2012 18:42:34 GMT
Server:nginx/0.7.67
Via:1.1 varnish, 1.0 7a0b4b3db0cc0d369fe1d6981bfb646a.cloudfront.net:11180 (CloudFront), 1.0 6af08f4042ec142b4b760ca4cd62041d.cloudfront.net:11180 (CloudFront)
X-Amz-Cf-Id:2b205edf4e9ef000a31a0208ca68f4e15b746eb430cde2ba5cc4b7dff4ba41a76c24f43cf498be02,8d5863a42eea452f86831a02f3eb648b26fe07013b08b95950f15ef8ba275822e1eb3b7ed2550d01
X-Cache:Hit from cloudfront
X-Varnish:2130919357
Il n'y a aucune mention de l'encodage ici, et quand je vois le fichier normal, il ne gzip. Je me demande donc ce que je dois faire ici pour demander à Cloudfront de demander une version gzip de l'application à partir de mon application afin qu'elle puisse être utilisée par le client.
This post indique que vous devez manuellement gzip et télécharger le fichier, mais je ne vois pas pourquoi cela devrait être nécessaire. Pour un, c'est embêtant, et deux, ne serait-il pas demander le même fichier que mon navigateur directement? Alors pourquoi ne pas simplement servir le fichier gzip'd comme il le fait par défaut dans mon application?
Tous les conseils pour faire fonctionner gzip'ng correctement seraient super. Je ne voudrais pas devoir gzip manuellement mes dossiers et les télécharger si possible.
Il s'avère donc que j'avais des enregistrements A pointant vers heroku.com plutôt que CNAME-ing herokuapp.com comme le suggèrent les documents. Dans ce cas, il était en train de filtrer mes demandes à travers Varnish. Et c'était tout gzipping. Je l'ai changé maintenant et je vais utiliser 'Rack :: Deflater' jusqu'à ce que je puisse réellement mettre à niveau vers Rails 3.1 (qui est évidemment mon premier choix, mais pas probablement pour moi ATM) – brad
Super, heureux d'être utile - n'hésitez pas à cocher ma réponse;) –
FYI Je ne pense pas que quelque chose dans cet article que vous avez référé est vraiment nécessaire. Cloudfront saisit mes fichiers en passant l'en-tête Accept-Encoding, puis les met en cache dans son CDN. Je ne vois aucune raison pour laquelle je synchroniserais manuellement mes ressources. La première demande sera lente, mais les demandes subséquentes seront rapides et traitées à partir du CDN. Merci encore pour les conseils. – brad