encoding - 在 Cloudfront 上接受编码 header 服务来自 Heroku Cedar 上 Rails 3.0.x 的 Assets

标签 encoding heroku gzip cdn amazon-cloudfront

当我使用 Rails 应用程序通过 Heroku 的 Cedar 堆栈(即不通过 CDN)直接为我的 Assets 提供服务时,它们会自动进行 gzip 压缩。 (有关为什么我对此感到困惑,请参阅我的 previous question)

现在,我正在尝试设置 Cloudfront 来为这些 Assets 提供服务,理想情况下,我希望它们也被 gzip 压缩。根据我的阅读,我认为 Cloudfront 会传递 Accept我的应用程序的 header ,因此如果支持,它们应该以 gzip 格式提供(就像您直接请求 heroku 上的 Assets 时一样)。但事实并非如此。 Assets header 最终看起来像这样:

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

这里没有提到编码,当我查看纯文件时,它不是gzip'd。所以我想知道我需要在这里做什么才能让 Cloudfront 从我的应用程序请求 Assets 的 gzip 版本,以便它可以将其提供给客户端。

This post说您需要手动 gzip 并上传文件,但我不明白为什么需要这样做。一方面,它很烦人,另一方面,它不会直接请求与我的浏览器相同的文件吗?那么为什么它不像我的应用程序中默认那样只提供 gzip 文件呢?

任何让 gzip'ng 正常工作的提示都会很棒。如果可能的话,我不想手动压缩我的文件并上传它们。

最佳答案

Cedar 提供的文件不会被堆栈 GZipped,Cedar 只提供您在应用程序代码中拥有的任何内容。见 documentation :

Since requests to Cedar apps are made directly to the application server – not proxied through an HTTP server like nginx – any compression of responses must be done within your application. For Rack apps, this can be accomplished with the Rack::Deflater middleware. For gzipped static assets, make sure that Rack::Deflater is loaded before ActionDispatch::Static in your middleware stack.



因此,您看到的 GZipping 要么是错误的标题,要么来自其他地方。因此,如果您刚刚将文件推送到 Cloudfront,那么您只会看到同样的事情。

如果您正在考虑通过 CDN 提供压缩 Assets ,我真的建议您考虑使用 Rails 3.1 并使用 Assets 管道。这不仅可以让您更好地控制自己的 Assets ,还可以让您更轻松地访问 serving them over a CDN .

关于encoding - 在 Cloudfront 上接受编码 header 服务来自 Heroku Cedar 上 Rails 3.0.x 的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8781139/

相关文章:

html - 我可以在有空格的 URL 中用 & nbsp 替换 % 20 吗?

c# - 在构建使用数据的 XmlReader 或 XPathDocument 之前,如何从基于 XML 的数据源中删除无效的十六进制字符?

Java .properties 文件在尝试获取希伯来语值时出现乱码

ssl - *.herokuapp.com 通配符证书到期

javascript - Grunt uglify 后,Angular Controller 模块无法实例化

javascript - 膨胀/解压缩部分 gzip 的算法

javascript - Ajax 调用以 Base64 字符串形式返回 PDF 文件

google-app-engine - Google App Engine 是否有生产控制台(如 heroku)?

mysqldump + gzip 制作 0 字节 gz 文件

json - 当 'auto' 将数据从 S3 加载到 Redshift 表时,大小写是否重要?