Заголовки Accept-Encoding в Cloudfront, обслуживающие ресурсы из Rails 3.0.x в Heroku Cedar - PullRequest
4 голосов
/ 09 января 2012

Когда я использую свое приложение Rails для непосредственного обслуживания своих активов через стек Cedar в Heroku (т.е. НЕ через CDN), они автоматически получают gzip'd.(См. Мой предыдущий вопрос о том, почему я запутался в этом)

Теперь я пытаюсь настроить Cloudfront для обслуживания этих активов, и в идеале мне бы хотелось, чтобыони также должны быть gzip'd.Из того, что я прочитал, я подумал, что Cloudfront передаст заголовки Accept моему приложению, поэтому они должны быть переданы gzip'd, если они поддерживаются (так же, как и когда вы делаете прямой запрос к ресурсу на heroku).).Но это не так.Заголовки ресурсов выглядят так:

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 запросил gzip-версию ресурса из моего приложения, чтобы он мог передать это клиенту.

Эта публикация говорит, что вам нужно вручную сжать и загрузить файл, но я не понимаю, почему это необходимо.Во-первых, это раздражает, а во-вторых, не будет ли он запрашивать файл так же, как мой браузер напрямую?Так почему бы просто не подать файл gzip'd, как это делается по умолчанию в моем приложении?

Любые советы по правильной работе gzip'ng были бы хорошими.Я хотел бы, чтобы мне не приходилось загружать файлы и загружать их вручную, если это возможно.

1 Ответ

3 голосов
/ 09 января 2012

Файлы, обслуживаемые Cedar, НЕ получают GZipped стеком, Cedar обслуживает только то, что у вас есть в коде приложения.См. Документацию :

Поскольку запросы к приложениям Cedar отправляются непосредственно на сервер приложений, а не через прокси-сервер через HTTP-сервер, например, nginx, любое сжатие ответов должно выполняться внутри вашего приложения.приложение.Для приложений Rack это может быть достигнуто с помощью промежуточного программного обеспечения Rack :: Deflater.Для gzipped статических ресурсов убедитесь, что Rack :: Deflater загружен до ActionDispatch :: Static в вашем стеке промежуточного программного обеспечения.

Поэтому GZipping, который вы видите, является либо ложным заголовком, либо исходит из другого местакоторый.Поэтому, если вы только что отправили файлы в Cloudfront, вы видите то же самое.

Если вы рассматриваете возможность работы с архивированными активами через CDN, я бы действительно рекомендовал взглянуть на переход к Rails 3.1 и использоватьАктив трубопровод.Это не только даст вам больший контроль над вашими активами, но также даст вам гораздо более простой путь к обслуживанию их по CDN .

...