2010-10-17 76 views
3

我正在開發一個網站,我正在使用gzip.exe預先壓縮css和js文件(它只有一個css文件,從4.53 KB到1.50 KB,以及一個包含jquery和一些腳本的js文件從72.8 KB變爲24.7 KB)Safari不接受gzip內容?

這些文件是style.gz和js.gz並作爲靜態文件。

問題是,他們不適用於Safari(v5.0.2)而不是css既不是js。

做工精細,這些瀏覽器:

火狐3.6.10 /谷歌瀏覽器6.0.4 .../IE 8的x64 /絨面3.0.6 /傲遊2.5.15 .../Avant瀏覽器2010

他們都做工精細,除了Safari瀏覽器

我使用Windows 7 64位系統

回答

3

你應該得到服務器給gzip他們 - 這可以在htaccess文件來完成和工作得很好。

+0

是的,我已經知道,但我想預先壓縮它們,因爲它們是靜態的,並且可能會消耗一些服務器資源以用於共享Web主機。 – medk 2010-10-17 22:06:22

+1

夠公平 - 但我懷疑你不會注意到這個區別。 – 2010-10-17 22:26:47

+0

跳回來:我相當肯定我讀了一個地方,一旦「初始gziping」已完成,它被保存在服務器的內存中。所以未來的請求來自那裏,而不是每次都重新生成。再加上沉重的緩存和長期過期的標題 - 你真的不應該注意。 PS。你應該使用「deflate」而不是gzip,如果你的服務器允許的話,因爲它更高效。 – 2010-10-20 12:54:54

1

有解決這個問題的方法。基本上,你需要改用.jgz。廣州作爲擴展JavaScript文件:

Fix for .gz and Safari

+0

謝謝邁克爾。對於jgz它現在可以工作,但是css還沒有工作。即使使用.jgz或.cssgz – medk 2010-10-17 22:00:07

2

+1 Rob說什麼。

你在做什麼是不應該工作的黑客,所以當它失敗時你不能抱怨。提供gzip資源與使用Content-Encoding標頭爲不同類型的資源提供服務時完全不同,因此可以在網絡上對其進行壓縮。

對於不懂gzip的用戶代理,服務預壓縮文件顯然也會失敗。 HTTP標準提供了一種協商此機制的機制:Accept-EncodingContent-Encoding。除非您以完全符合標準的方式重新實施該機制(並且邁克爾的鏈接中的文章並非開始才能獲得該權利),否則您會阻止客戶端。

這是沒有必要的。 Gzip速度很快,服務器通常會緩存靜態內容的壓縮版本,因此您無法通過嘗試再次猜測它。 HTTP壓縮是Web服務器核心競爭力的一部分,讓Web服務器完成其工作並單獨離開gzip。

+0

感謝您的回覆bobince。您可能有權利,但您是否認爲壓縮100 KB的大文件可能會消耗一些資源,尤其是在共享託管計劃上可能會引起注意?並且您確定壓縮的js或css文件將被緩存並一遍又一遍地重複傳輸,而不會在每次請求頁面時重新壓縮? – medk 2010-10-18 00:22:22