網頁在服務器端通過了gzip或者其餘格式的壓縮後的輸出明顯減小了content-length字節,當訪問過百萬時,這些減小的字節就會變爲客觀的流量給節約下來;從而減輕服務器的壓力以及網頁的訪問速度;javascript
客戶端在向服務端發送http請求時,在請求頭中有一個Accept-Encoding的頭信息,該頭信息告知服務器端本客服端能接收什麼樣的壓縮文件,若是服務器端配置了壓縮的需求,就會返回相應的壓縮文件,而後瀏覽器再解碼呈現出來;咱們在作採集時,須要採集的是未壓縮的文件,因此在http請求頭上不要包含Accept-Encoding的鍵;php
經過這個原理在php給app寫接口時,可作一些安全方面的處理,具體如何實現,期待和有經驗的app開發人員一塊兒研究.
在http段添加以下配置css
gzip on|off; #是否開啓gzip gzip_buffers 32 4K| 16 8K #緩衝(壓縮在內存中緩衝幾塊? 每塊多大?) gzip_comp_level [1-9] #推薦6 壓縮級別(級別越高,壓的越小,越浪費CPU計算資源) gzip_disable #正則匹配UA 什麼樣的Uri不進行gzip gzip_min_length 200 # 開始壓縮的最小長度(再小就不要壓縮了,意義不在) gzip_http_version 1.0|1.1 # 開始壓縮的http協議版本(能夠不設置,目前幾乎全是1.1協議) gzip_proxied # 設置請求者代理服務器,該如何緩存內容 gzip_types text/plain application/xml # 對哪些類型的文件用壓縮 如txt,xml,html ,css gzip_vary on|off # 是否傳輸gzip壓縮標誌
Examplehtml
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\.";
注意:java
這裏的緩存控制主要是針對圖片,css,js等變化週期較短的靜態文件;以圖片爲例,當咱們第一次訪問這張圖片時,服務器返回的是200,同時在響應頭返回了兩個鍵,Etag:即該文件的'指紋'(惟一標識)以及Last-Modified:'文件的修改時間';此時瀏覽器,以及其餘的緩存服務器就會把這張圖片給緩存起來;再次請求這張圖片時,請求頭增長了兩個鍵值,If-Modified-Since:上次發生改變的時間;If-None-Match:上次文件自己的Etag值,服務器根據這兩個鍵值判斷其Etag和Last-Modified,若是都沒發生改變就不返回這張圖片,只返回一個304的狀態碼,服務器接收到這個304的狀態碼就會本身去從緩存裏面找這個被緩存的圖片;
這樣就減小了服務器的帶寬壓力以及提高了網站訪問速度;瀏覽器
在location段以及if段能夠設置緩存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; }
格式安全
expires 30s; expires 30m; expires 2h; expires 30d;
注意:服務器的日期要準確,若是服務器的日期落後於實際日期,可能致使緩存失效服務器