HTTP协议的header Cache -Control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
Nginx的ngx_http_headers_module模块可以对Cache-Control头相关的东西进行配置
例如:
1 # 相关页面设置Cache-Control头信息,dns及cdn目录配置10天
2
3 if ($request_uri ~* “^/$|^/dns/.+/|^/cdn/.+/”) {
4 add_header Cache-Control max-age=864000;
5 }
6
7 if ($request_uri ~* “^/linux/|^/t/”) {
8 add_header Cache-Control max-age=86400;
9 }
max-age意思是:客户端本地的缓存,在配置的生存时间内的,客户端可以直接使用,超出生存时间的,需要到服务器上取新数据。当然这些还要看客户端浏览器的设置。
标签归档:Cache-Control
设置http响应头Cache-Control及Pragma,增加CDN cache命中率
最近在折腾CDN cache命中率。然后就发现在伪静态环境下,cdn缓存命中率非常低,一番折腾后发现如果源站的http头部包含一些不缓存的信息,那么CDN”也许“会相应的继承源站发出的HTTP状态。
通常喜欢用军哥LNMP安装包的朋友会发现,在动态及伪静态的环境中,HTTP头部信息会包含Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache,“可能“就是这种状态影响了CDN对源站缓存的判断。
如何去掉Cache-Control及Pragma在http头部中的状态呢?
如果没有看到此文的话,你会非常痛苦的认为是网站程序本身所发出的状态,然后一番查找修改后发现依然无解,我理解这个过程,因为我就是这么干的。非常之痛苦。。。。
其实解决Cache-Control: no-store,no-cache.....和Pragma: no-cache很简单,只需修改php.ini中的session.cache_limiter参数,军哥lnmp默认值是nocache,只要修改为none即可解决这个HTTP状态中的缓存问题。耶!耶!耶!耶!耶~~~~~~~~~
session.cache_limiter = nocache
改为
session.cache_limiter = none
重启apache