2012-02-08 61 views
1
  • 我有一個樣式住在/static/styles/min.css
  • 當頭部允許,我把它改寫到/static/styles/min.css.gz(預壓縮文件)
  • 當我使用curl + GET請求min.css文件,我找回壓縮的內容。
  • 當我在瀏覽器中請求實際頁面時,沒有應用CSS。
  • 如果我關閉重寫,CSS應用很好,所以這是一個gzip內容的問題。
  • 響應頭包括: 「內容傳輸編碼:二進制」, 「內容類型:應用程序/ x-gzip的」, 「內容長度:61021」

這是在我的虛擬主機文件:gzip js/css瀏覽器不能理解。傳輸編碼問題?

RewriteCond %{HTTP:Accept-Encoding} gzip 
RewriteRule ^(.*)\.css$ $1\.css\.gz [L,T=text/css] 
<FilesMatch .*\.css\.gz> 
    ForceType text/css 
    Header unset Content-Transfer-Encoding 
    Header append Content-Encoding gzip 
    Header append Content-Type text/css 
</FilesMatch> 
+0

你可能想報頭組沒有標題附加(這是很可能是因爲您發送多個內容類型標頭)。不mod_deflate緩存它壓縮的東西嗎?是否真的值得壓縮這些文件(我不知道)?無法抗拒:*咳嗽* nginx。 *咳嗽*更快。 – AD7six 2012-02-08 17:50:04

+0

感謝您的回覆。標題集不能解決它。我不認爲mod_deflate緩存。無論如何,我想避免把這個負載放在Apache上。我們的構建系統預先壓縮這些文件,所以從開發角度來看它確實沒有額外的開銷。 Nginx速度更快,但我是這個大型網站上唯一的開發人員/管理員,並且我沒有經驗,沒有足夠的帶寬來接收任何新的內容。 – 2012-02-08 20:09:08

回答

2

請求文件foo.css.gz,使用下列規則

<FilesMatch "\.css\.gz$"> 
    Header set Content-Encoding gzip 
    Header set Content-Type "text/css; charset=utf-8" 
</FilesMatch> 

結果以下標題:

Accept-Ranges:bytes 
Cache-Control:max-age=2592000 
Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Length:71 
Content-Type:text/css; charset=utf-8 
Date:Wed, 08 Feb 2012 21:01:34 GMT 
Expires:Fri, 09 Mar 2012 21:01:34 GMT 
Keep-Alive:timeout=5, max=100 
Last-Modified:Sun, 05 Feb 2012 21:53:14 GMT 
Server:Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/1.0.0e DAV/2 PHP/5.3.10 with Suhosin-Patch 

與請求foo.css和讓mod_deflate完成它的事情(使用html5boilerplate中的標準.htaccess文件)相同的標頭(略有不同的內容長度)。

你會發現這個回購有用:https://github.com/AD7six/h5bp-server-check :)

+0

我嘗試添加該標題,並且不,它沒有顯示在響應標題中,所以出現了一些錯誤。我在這裏避免提到這一點,因爲我不想進一步混淆事物,但這些縮小文件生活在另一臺服務器上,我反向代理:http://stackoverflow.com/questions/9185769/mod-rewrite- not-working-with-reverse-proxy-in-vhost – 2012-02-08 23:14:10

+0

不幸的是,cdn不允許我們指定我們需要的頭文件。出於這個原因,我手動爲cdn上的圖像設置緩存標頭,並且這些標頭會被設置。看起來像重寫或gzip導致所有這些問題。好吧。我想現在我會用deflate。不理想,但至少它有效。 – 2012-02-08 23:46:47