做筆記,上來就直接幹了
當直接在浏覽器中輸入一個URL,或者點選一個連結的時候,那麼浏覽器緩存就會起作用,如果緩存沒有過期,那麼浏覽器會從本地讀取資源,不會發起HTTP請求,如果緩存過期,那麼浏覽器會發起新的浏覽器請求。按<code>ctrl+F5</code>,浏覽器會清空本地緩存,重新請求資源。
<code>Expires</code>是HTTP/1.0的緩存頭, <code>Cache-Control: max-age</code>是HTTP/1.1是用來進行HTTP緩存的頭。
Expires指定了資源過期的絕對時間,GMT格式,Cache-Control: max-age指定了資源過期的相對時間,機關是秒。
在支援HTTP/1.1的浏覽器上,如果發送兩個頭,那麼Cache-Control: max-age會覆寫掉Expires;
在支援HTTP/1.0的浏覽器上,即使發送了兩個頭,但是隻有Expires會起作用,是以為了相容老的浏覽器,還是要同時發送這兩個頭。
設定HTTP緩存,需要安裝expires_module,其會發送Expires和Cache-Control: max-age兩個HTTP頭。配置如下:
# HTML文檔的有效期是最後修改時刻後的一星期
ExpiresByType text/html M604800
A86400意指浏覽時起算1天.格式是代碼加上秒數.代碼有分兩種,”A”等同”access”,意指浏覽時起算過期時間.使用代碼”A”比較适合應用 在不常變動的網頁檔案類型,例如圖檔.另外一種代碼是”M”,其意義等同于”modification”,指的是網頁檔案的”最後編輯時間”
下面兩種寫法一個意思
ExpiresByType p_w_picpath/gif A2592000
<code>ExpiresByType application/x-javascript "access plus 30 days"</code>表示對js資源設定<code>Expires</code>和<code>Cache-Control: max-age</code>頭,其中<code>Expires</code>的值是以用戶端通路資源的時間為基準的後30天,<code>Cache-Control: max-age</code>的值是3600x24x30秒。
兩種寫法是有差別的,在前面用squid 緩存的時候
修改時間如果短很容易過期,過期後squid會一直請求後端apache
比如
squid的日志
[27/Sep/2015:10:51:12 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:10:57:00 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:10:58:03 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:00:34 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:00:52 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:01:13 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:04:13 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:06:29 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:06:39 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:07:09 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:08:27 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
[27/Sep/2015:11:12:34 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT
修改後
[27/Sep/2015:11:14:53 TCP_IMS_HIT:HIER_NONE
[27/Sep/2015:11:16:47 TCP_IMS_HIT:HIER_NONE
[27/Sep/2015:11:19:44 TCP_IMS_HIT:HIER_NONE
[27/Sep/2015:11:24:48 TCP_IMS_HIT:HIER_NONE
[27/Sep/2015:11:26:09 TCP_IMS_HIT:HIER_NONE
[27/Sep/2015:11:27:36 TCP_IMS_HIT:HIER_NONE
後端apache幾乎沒有日志,以前一直304
2 當浏覽器重新整理的時候 squuid 還是後請求源伺服器,因為浏覽器會發起
If-Modified-Since:
但是對于圖檔基本沒必要回源,是以可以配置squid忽略
refresh_pattern -i .gif$ 0 50% 4320 ignore-reload
refresh_pattern -i .bmp$ 0 50% 4320 ignore-reload
refresh_pattern -i .jpg$ 0 50% 4320 ignore-reload
refresh_pattern -i .png$ 0 50% 4320 ignore-reload
refresh_pattern -i .swf$ 0 50% 4320 ignore-reload
refresh_pattern -i .mp3$ 0 50% 4320 ignore-reload
refresh_pattern -i .wmv$ 0 50% 4320 ignore-reload
refresh_pattern -i .rm$ 0 50% 4320 ignore-reload
refresh_pattern -i .mpeg$ 0 50% 4320 ignore-reload
refresh_pattern -i .wma$ 0 50% 4320 ignore-reload
refresh_pattern -i .exe$ 0 50% 4320 ignore-reload
refresh_pattern . 0 20% 4320