http缓存

请求中的缓存:
cache-control: no-cache/max-age = 0 不能使用缓存,包括浏览器和代理的,必须去服务器拉取新的数据。
cache-control: no-cache/max-age = 0(有etag或者ifmodifiedsince头)必须去服务器进行验证,如果文件已经更新则返回最新的,否则返回304.
因为没有条件头,服务器无法判断用户的条件,只能把最新的文件返回。比如服务器的文件时间是1,用户发来请求,如果没有条件判断,可能用户需要的是最新的,也可能是1之前的就行,但是服务器无法判断,如果用户是要最新的但是服务器返回了304那就是不对的。

响应中的缓存:(谁?可以缓存多久?)
public:代理可以缓存,客户端可以缓存
private:代理不能缓存,客户端可以缓存
cache-control:no-cache/max-age=0 客户端可以缓存,但是每次请求都需要到服务器进行验证。并且浏览器在请求中会加上cache-control:max-age=0;可能返回200或304
cache-control: no-store 代理和客户端都不能缓存,并且会把本来缓存中的删除,所以本地是没有文件的,每次访问都需要去服务器进行拉取最新的。
cache-control: (proxy-)must-revalidate 资源可以从缓存中获取,但是如果过期了就必须去服务器验证,代理也必须去服务器验证,而不能返回代理缓存的。
expire:绝对过期时间,服务器和客户端的时间不一样或者不同步,会导致不准确的数据。

调试方法:

1 首先修改apache配置文件,加载两个模块(新版本的apache可能不需要IfModule mod_headers中不需要加.c了,否则会导致服务器启动失败)

<filesmatch "\.(html|htm|txt)$">  
header set cache-control "max-age=3600"  
</filesmatch>  

<filesmatch "\.(css|js|swf)$">  
header set cache-control "max-age=604800"  
</filesmatch>  
</IfModule>  

<IfModule mod_expires>

ExpiresActive On
ExpiresDefault "access plus 6 months"
ExpiresByType image/* "access plus 10 years"
ExpiresByType text/* "access plus 10 years"
ExpiresByType application/* "access plus 30 minutes" 

</IfModule>

2 把fiddler的菜单选择rule那个下拉列表,选择请求前或响应后编辑http头,或者选中请求的url,选择replay的edit可以编辑http请求头再发送,或者选unconditiontly,去掉ifmodifiedsince和etag等条件再请求

3不要勾选chrome F12下的disable cache,这样浏览器才会每次请求时去访问本地缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值