请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于代理缓存和etag的两个问题

老师您好,关于在proxy cache中的 etag,我有两个问题
1. 在没有slice的情况下,每个文件在nginx上被缓存时,是否会缓存后端返回的etag,这个etag是存在缓存文件中么?
2. 在有slice的情况下,我记得在http range请求中,无论请求哪个区间,返回的etag应该都是一样的。那么假设有一个文件,会被slice成2个分片,分片1现在被缓存在nginx中,他记录的文件etag为a。现在后端文件更新了,文件的etag变成了b,这时候客户端再请求该文件时,请求分片1中的内容会被返回刚才缓存的部分,分片2中的内容由于没有被缓存会去后端获取到最新的文件内容,那么这种数据不一致的情况ngimx是否会出现,又是如何避免的?

正在回答 回答被采纳积分+3

1回答

Jeson 2020-07-02 18:14:50

你好!

理解不太正确

1、 etag是客户端缓存存,它 是计算 Last-Modified 与 Content-Length,Last-Modified是文件更改时间戳而Content-Length是文件大小计算得到。

2、如果nginx端的静态缓存,那就是file cache ,这里机制不一样的。

3、如果是proxy_cache,那么主要是基于proxy_cache_key维度来作,如:

            proxy_cache_key $host$uri$is_args$args;

0 回复 有任何疑惑可以回复我~
  • 提问者 烈焰卡卡 #1
    您看下第二个问题,就是一个大文件即便被分成多片,在后端(源站)的etag应该都是一样的,在nginx里被分成多片缓存。这些分片返回给客户端的etag应该也是一样的。那这个etag是存在缓存文件中的么
    回复 有任何疑惑可以回复我~ 2020-07-02 18:20:42
  • Jeson 回复 提问者 烈焰卡卡 #2
    Last-Modified修改了,etag不一致,实现机制重新按照缓存文件更新进行重新获取元素。
    回复 有任何疑惑可以回复我~ 2020-07-02 19:38:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信