在apache htdocs中,我只想要壓縮文件(gzip文件)並基於請求的接受編碼類型,如果啓用了gzip編碼,我希望apache提供壓縮文件,如果不支持gzip編碼,那麼我希望apache通過解壓縮gzip文件來提供服務。如何根據請求接受的編碼類型提供壓縮/解壓縮文件,只有壓縮文件
我不想保留未壓縮的文件並在訪問時使用deflate進行壓縮,因爲這樣做效率低下,默認情況下所有客戶端都支持gzip編碼。
通過在htdocs目錄中同時使用壓縮和非壓縮文件(example.js和example.jsgz),我可以通過使用RedirectCond對請求的可接受編碼和RedirectRules進行工作。但是這需要存儲兩個文件(壓縮文件和普通文件)。以下是我用於重定向規則的配置。
<Directory /var/www/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
SetEnv force-no-vary
Header set Cache-Control "private"
RewriteEngine on
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{REQUEST_FILENAME}gz -f
# send .htmlgz instead of .html
RewriteRule ^(.+)\.(html|css|js)$ $1.$2gz [L]
</Directory>
我不想這樣做,因爲我必須保持每個文件的兩個版本。
例如:
裏面的htdocs應用目錄的內容的應用程序目錄
在這種情況下與多視圖選項
ls app/
example.jsgz
服務器端apache的配置,我能服務器example.jsgz當請求文件是example.js時example.js不存在。而就我的Apache側的配置如下:
<Directory /var/www/htdocs/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
Options +Multiviews
SetEnv force-no-vary
Header set Cache-Control "private"
</Directory>
案例1:
請求頭說gzip編碼的支持。請求的網址是example.js,而不是example.jsgz。這是工作和example.jsgz文件與內容編碼一起提供gzip和客戶端能夠解壓縮和使用js文件。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Accept-Encoding:gzip,deflate,sdch
Response Headers:
Content-Encoding:gzip
案例2:
請求頭說,不支持gzip編碼。請求的網址是example.js,而不是example.jsgz。這不起作用,因爲Apache服務example.jsgz和客戶端失敗,因爲不支持gzip編碼。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Response Headers:
Content-Encoding:gzip
當客戶端不支持通過htdocs中的壓縮文件來支持gzip編碼的情況2有辦法嗎?
我已閱讀關於充氣和放氣選項。還有關於Multiviews選項。但是當目錄包含壓縮格式(gzip編碼)的多種類型的內容(javascript,css,html)時,我沒有在目錄級找到示例。
在此先感謝