this.zuulProperties.getRoutes().remove(oldExternalapis.getServiceId());
this.zuulProperties.getRoutes().put(newExternalapis.getServiceId(), zuulRoute);
如果服务器中的文件etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"",
r->headers_out.last_modified_time,
r->headers_out.content_length_n)
- etag->value.data;
r->headers_out.etag = etag;
已更改,但文件内容尚未更新,那么last-modified-time
的值是否相同?
为什么内容哈希生成的etag
值不是?
答案 0 :(得分:1)
为什么内容哈希不能生成etag值?
除非nginx记录了无法说出为什么的原因。
我的推测 他们之所以这样做是因为它非常快并且只需要固定的时间。计算散列可能是一项昂贵的操作,所需的时间取决于响应的大小。以简单性和速度而闻名的nginx可能并不想增加这种开销。
如果服务器中的文件上次修改时间已更改,但文件内容尚未更新,则etag值是否相同?
否,它不会相同,因此必须重新保存文件。结果是,响应速度比基于散列的ETag
慢,但是响应是正确的。
此算法的最大问题是,ETag
保持不变时内容可能会更改,在这种情况下,响应将不正确。如果文件更改(以保持相同长度的方式)快于Last-Modified
标头的精度,则可能会发生这种情况。 (当然,不同的内容也可能产生相同的哈希,因此这种方法也不是完全不受问题困扰的。)
因此,大概是nginx权衡了这种权衡-一种更快的响应,但是有一点不正确的机会-并认为这是值得的。