nginx - 瀏覽器是如何處理服務(wù)器返回的expires和Cache-Control參數(shù)的
問題描述
nginx上配置了
expires 1d;
請(qǐng)求相應(yīng)資源時(shí)返回
Cache-Control:max-age=86400Expires:Thu, 11 Aug 2016 12:16:43 GMT
按照我的理解,該資源應(yīng)該在瀏覽器緩存保持一天,在緩存期內(nèi)第二次刷新時(shí)應(yīng)該不需要發(fā)送請(qǐng)求而直接返回
Status Code:200 OK (from cache)
而事實(shí)上,每次請(qǐng)求服務(wù)器會(huì)通過etag/Last-Modified對(duì)比來處理返回結(jié)果,如果request header 返回的If-Modified-Since/If-None-Match與現(xiàn)有的etag/Last-Modified不匹配,返回200刷新資源,如果匹配,返回304。
那么Expires/ Cache-Control 存在的意義是什么
8-12號(hào)更新
在nginx上進(jìn)行如下設(shè)置
add_header Last-Modified ''; expires 5d; etag off;
關(guān)閉etag,關(guān)閉last-modifed;僅僅開啟5天的緩存時(shí)間。response headers返回如下;
Accept-Ranges:bytesCache-Control:max-age=432000Connection:keep-aliveContent-Length:826Content-Type:text/cssDate:Fri, 12 Aug 2016 05:52:24 GMTExpires:Wed, 17 Aug 2016 05:52:24 GMTServer:nginx/1.4.1
請(qǐng)求該css文件時(shí),瀏覽器緩存失效,服務(wù)器每次返回 200,并且在body中返回css;看起來expires 這個(gè)參數(shù)并沒有用
問題解答
回答1:已經(jīng)解決了,我理解的沒錯(cuò),Expires的確是用來控制緩存過期時(shí)間的,沒有過期時(shí)返回200 (fromcache)但重點(diǎn)是我的訪問方式不對(duì),Expires/Cache-Control對(duì)f5刷新無效。正確的方式是地址欄確認(rèn)直接訪問。
參考博客http://www.cnblogs.com/skynet...
回答2:你應(yīng)該是兩個(gè)功能都開了,Last-Modified會(huì)優(yōu)先被看,Nginx應(yīng)該是默認(rèn)開Last-Modified,或者我記錯(cuò)了
一般情況下,靜態(tài)資源如圖片、CSS用Expires/ Cache-Control,因?yàn)楦膭?dòng)非常少。而改動(dòng)較多的可以用Last-Modified,確保瀏覽器拿到最新版本
回答3:樓主是在nginx.conf的那一塊配置的。我配置expires沒有生效。但是gzip壓縮的生效了...
相關(guān)文章:
1. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?2. debian - docker依賴的aufs-tools源碼哪里可以找到啊?3. 百度地圖api - Android 百度地圖 集成了定位,導(dǎo)航 相互的jar包有沖突?4. vim - docker中新的ubuntu12.04鏡像,運(yùn)行vi提示,找不到命名.5. docker-compose 為何找不到配置文件?6. docker網(wǎng)絡(luò)端口映射,沒有方便點(diǎn)的操作方法么?7. 為什么我ping不通我的docker容器呢???8. golang - 用IDE看docker源碼時(shí)的小問題9. html5和Flash對(duì)抗是什么情況?10. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?

網(wǎng)公網(wǎng)安備