當我使用Rails應用程序通過Heroku的Cedar堆棧直接服務我的資產時(即不通過CDN),他們會自動獲取gzip。 (關於爲什麼我對此感到困惑,請參閱我的previous question)在Heroku上使用Rails 3.0.x上的Cloudfront服務資產接受編碼標題Cedar
現在,我試圖設置Cloudfront來代替服務這些資產,並且理想情況下,我希望他們也可以使用gzip。從我讀過的內容中,我認爲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壓縮。所以我想知道我需要在這裏做些什麼來讓Cloudfront從我的應用程序請求一個gzip版本的資產,以便它可以將此服務提供給客戶端。
This post說你需要手動gzip和上傳文件,但我不明白爲什麼應該是必要的。首先,它很煩人,還有兩個,它不會直接請求文件與我的瀏覽器相同嗎?那麼爲什麼它不會像我的應用程序默認那樣提供gzip文件呢?
讓gzip'ng正常工作的任何提示都會很棒。我想不必手動gzip我的文件並在可能的情況下上傳它們。
因此事實證明,我有A記錄指向heroku.com,而不是CNAME-ing herokuapp.com的文檔建議。在這種情況下,它實際上是通過Varnish過濾我的請求。它正在克服一切。我已經改變了它,現在我要使用'Rack :: Deflater'直到我實際升級到Rails 3.1(這顯然是我的第一選擇,但不可能是我的ATM) – brad 2012-01-09 15:46:54
超級,很高興能夠幫助 - 隨時打勾我的答案;) – 2012-01-09 16:14:01
僅供參考我不認爲你引用的那篇文章中的任何內容都是非常必要的。 Cloudfront抓取通過Accept-Encoding標頭的文件,然後將它們緩存在CDN中。我看不出有什麼理由要手動同步我的資產。第一個請求會很慢,但隨後的請求將會很快並由CDN提供。 Thx再次提示。 – brad 2012-01-09 17:40:22