- Linux運(yùn)維最佳實(shí)踐
- 胥峰 楊俊俊
- 878字
- 2019-01-04 00:50:54
最佳實(shí)踐9:理解HTTP協(xié)議中的緩存控制:服務(wù)器端緩存控制頭部信息
HTTP協(xié)議采用客戶端請求(Request)、服務(wù)器端響應(yīng)(Response)的模型。在請求和響應(yīng)中,都能通過相關(guān)控制指令對對端的緩存行為進(jìn)行管理。首先需要關(guān)心的是,服務(wù)器端響應(yīng)中的緩存控制頭部,利用這些頭部控制信息可以精細(xì)化地管理客戶端的緩存行為。
下面使用wget命令來看一個(gè)簡單的例子。
# wget -S http://10.1.6.28/test.jpg #使用-S參數(shù),指定顯示響應(yīng)頭部信息 --2016-01-08 15:47:29-- http://10.1.6.28/test.jpg Connecting to 10.1.6.28:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Server: nginx/1.9.7 Date: Fri, 08 Jan 2016 07:47:28 GMT Content-Type: image/jpeg Content-Length: 20305 Last-Modified: Fri, 08 Jan 2016 07:25:26 GMT ① Connection: keep-alive ETag: "568f6466-4f51" ② Expires: Sat, 09 Jan 2016 07:47:28 GMT ③ Cache-Control: max-age=86400 ④ Accept-Ranges: bytes Length: 20305 (20K) [image/jpeg] Saving to: `test.jpg' 100%[===================================================================================================>] 20,305 --.-K/s in 0s 2016-01-08 15:47:29 (137 MB/s) - `test.jpg' saved [20305/20305]
在該實(shí)例中,服務(wù)器端使用到了4個(gè)指令來控制緩存。
·Last-Modified:Fri,08 Jan 201607:25:26 GMT表示該文件的最后修改時(shí)間是Fri,08 Jan 201607:25:26 GMT。客戶端在后續(xù)需要請求該文件時(shí),使用對應(yīng)的請求頭部If-Modified-Since:Fri,08 Jan 201607:25:26 GMT就可以驗(yàn)證服務(wù)器端文件是否發(fā)生變化。可以使用如下命令進(jìn)行驗(yàn)證:
wget --header='If-Modified-Since: Fri, 08 Jan 2016 07:25:26 GMT' -S http://10.1.6.28/test.jpg
如服務(wù)器端文件未在此時(shí)間后發(fā)生變化,則服務(wù)器端不需要重新發(fā)送整個(gè)文件,而只需要發(fā)送“304 Not Modified”通知客戶端即可。此時(shí)可以節(jié)省傳輸該文件的帶寬和時(shí)間。
·ETag:"568f6466-4f51"相當(dāng)于該靜態(tài)資源的身份ID。在Web服務(wù)器Nginx中,ETag的值是基于文件的最后修改時(shí)間(時(shí)間戳)和文件大小(字節(jié))計(jì)算出來的。瀏覽器在下一次請求該資源的過程中,使用If-None-Match:"568f6466-4f51"即可確認(rèn)該資源是否發(fā)生了變化。服務(wù)器端再次驗(yàn)證,如果未變化,則直接返回給客戶端HTTP/1.1304 Not Modified,而不需要再次傳輸整個(gè)文件,起到緩存的效果。如下所示:
# wget --header='If-None-Match: "568f6466-4f51"' -S http://10.1.6.28/test.jpg --2016-01-08 15:59:14-- http://10.1.6.28/test.jpg Connecting to 10.1.6.28:80... connected. HTTP request sent, awaiting response... HTTP/1.1 304 Not Modified Server: nginx/1.9.7 Date: Fri, 08 Jan 2016 07:59:14 GMT Last-Modified: Fri, 08 Jan 2016 07:25:26 GMT Connection: keep-alive ETag: "568f6466-4f51" Expires: Sat, 09 Jan 2016 07:59:14 GMT Cache-Control: max-age=86400 2016-01-08 15:59:14 ERROR 304: Not Modified.
·Expires:Sat,09 Jan 201607:47:28 GMT即服務(wù)器端通知客戶端,在Sat,09 Jan 201607:47:28 GMT之前需要獲取該資源時(shí),不必再發(fā)起HTTP請求,直接使用這個(gè)緩存文件即可。
·Cache-Control:max-age=86400即服務(wù)器端通知客戶端,你自收到這個(gè)文件起的86400秒內(nèi),都可以放心使用,不必再重復(fù)請求這個(gè)URL。
注意
和
是對同一個(gè)意思的兩種表示,前一個(gè)是絕對時(shí)間,后一個(gè)是相對時(shí)間。這兩個(gè)指令同時(shí)使用時(shí),max-age優(yōu)先起作用,因?yàn)橛袝r(shí)客戶端和服務(wù)器端的時(shí)鐘并不完全一致,有時(shí)甚至差別較大,故使用相對值更加合理。
- Linux設(shè)備驅(qū)動開發(fā)詳解:基于最新的Linux4.0內(nèi)核
- Getting Started with oVirt 3.3
- Linux系統(tǒng)架構(gòu)與運(yùn)維實(shí)戰(zhàn)
- Learning Windows Server Containers
- Linux集群和自動化運(yùn)維
- 嵌入式Linux驅(qū)動程序和系統(tǒng)開發(fā)實(shí)例精講
- Extending Bootstrap
- 移動應(yīng)用UI設(shè)計(jì)模式(第2版)
- Linux集群之美
- 操作系統(tǒng)之哲學(xué)原理第2版
- 每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)
- 大規(guī)模Linux集群架構(gòu)最佳實(shí)踐:如何管理上千臺服務(wù)器
- 電腦辦公(Windows 7 + Office 2013)入門與提高
- SAP后勤模塊實(shí)施攻略:SAP在生產(chǎn)、采購、銷售、物流中的應(yīng)用
- Docker for Developers