天子 发表于 2020/5/27 21:54

kangle内存缓存问题

网站是通过匹配host 标记host进行的方法反向代理

源站宝塔面板,已知宝塔nginx默认配置了Max-age,默认有缓存时间

问题一:
Cache-Control: max-age=43200
Date: Wed, 27 May 2020 13:27:27 GMT
ETag: W/"5e23c947-21ad"
Expires: Tue, 26 May 2020 02:20:54 GMT

这样看来缓存是每12小时更新最新的,浏览器的缓存时间是应该过期了才对,但是过期时间一直显示最初缓存的那个到期时间(只开了内存缓存,磁盘缓存设置0)

问题二:回应控制,匹配了缓存的文件,只勾了静态化,max-age时间改为其它的,浏览器显示的依旧是(43200 ,kangle缓存和浏览器都清理过缓存的,这个时间是宝塔上面的nginx配置文件的时间)

天子 发表于 2020/5/27 22:45

请求控制只勾flag的x-cache,这会不会是显示问题,其实是缓存更新了,显示源站到代理端的时间,并不是显示本地浏览器的缓存到期时间?

小樱 发表于 2020/5/27 23:52

静态化是强制缓存,就算源站更新了文件,也要等待时间过了后才会更新。
不勾选的话遵守ETag缓存,ETag值变动,缓存则立即自动更新。
浏览器缓存是遵守ETag的,你可以看看浏览器响应是304还是memory cache之类的
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/ETag

在响应有ETag的情况,如果值没有变动,浏览器不会进行更新缓存

天子 发表于 2020/5/28 06:29

小樱 发表于 2020/5/27 23:52
静态化是强制缓存,就算源站更新了文件,也要等待时间过了后才会更新。
不勾选的话遵守ETag缓存,ETag值变 ...

大概明白了,回应控制这里其实就是cdn对文件的缓存时间。
因为回应控制设置max-cache(我这里设置的是一年)的时间大于宝塔的配置文件时间(120s)
这样就会导致expires: Wed, 27 May 2020 22:01:41 GMT显示的浏览器过期时间比Date还要早(这里是源站对浏览器的过期时间,把反向代理端当作浏览器了,实际的更新时间还是date加上Max-age=120)
cache-control: max-age=120
content-type: text/css
date: Wed, 27 May 2020 22:04:25 GMT
etag: W/"5e23c947-1784"
expires: Wed, 27 May 2020 22:01:41 GMT

结论,当源站是宝塔时,反向代理端根本不用在回应控制设置缓存规则了,默认跟随站点的配置文件。当回应控制时间设置大于宝塔的缓存时间,就会出现以上情况

小樱 发表于 2020/5/28 06:44

天子 发表于 2020/5/28 06:29
大概明白了,回应控制这里其实就是cdn对文件的缓存时间。
因为回应控制设置max-cache(我这里设置的是一 ...

是的,不设置的情况,会遵守源站输出进行缓存。

天子 发表于 2020/5/29 16:50

小樱 发表于 2020/5/28 06:44
是的,不设置的情况,会遵守源站输出进行缓存。

缓存了,我的是通过“一步“”反向代理,如果想在kangle写对浏览器缓存规则只能在虚似空间创建xml文件,Max-age。我的这种反向代理可以实现写浏览器缓存时间不,

小樱 发表于 2020/5/29 18:27

天子 发表于 2020/5/29 16:50
缓存了,我的是通过“一步“”反向代理,如果想在kangle写对浏览器缓存规则只能在虚似空间创建xml文件,M ...

https://blog.csdn.net/xiaozhuo_tang/article/details/78300855
你要控制浏览器强制缓存时间的话,可以参考下这篇文章试试,比如文章介绍的,增加一个Cache-control: only-if-cached 响应头部
页: [1]
查看完整版本: kangle内存缓存问题