我正在查看Chrome开发工具中的日志。 我也可以看到它使用curl。 这是curl的输出
Content-Type: application/javascript Date: Sat, 24 Sep 2016 01:16:37 GMT ETag: "a02d00a09b8139b0919567e4c92cc752" Last-Modified: Fri, 23 Sep 2016 22:57:56 GMT Server: nginx x-amz-id-2: L3gfIQNLcBLUZ2gtVWDiIdN9xWWiV2H6K6zjjE9JSHVMnDXI6+uLuhqptqQRCZLNFoMmWg3mIQs= x-amz-request-id: E38062B3D506DF06 Content-Length: 1940494 Age: 7574 Warning: 110 squid/3.5.20 "Response is stale" X-Cache: HIT from 0.0.0.0 X-Cache-Lookup: HIT from 0.0.0.0:3128 Via: 1.1 0.0.0.0 (squid/3.5.20) Connection: keep-alive
为什么鱿鱼说Warning: 110 squid/3.5.20 "Response is stale" ?
Squid添加了这个头,因为它是HTTPcaching规范所要求的。 https://tools.ietf.org/html/rfc7234#section-5.5.0 :
“警告”标题字段用于携带有关可能不会反映在状态码中的消息状态或转换的附加信息。 此信息通常用于警告caching操作或应用于消息负载的转换可能导致的错误。
而第5.5.1节则简单地规定,当HIT对象陈旧时,需要caching(应该)发送110警告。 “应该”RFC要求是必须遵循的要求,除非特定的,非常好的和logging的理由不存在。 警告信息丰富,所以没有理由避免它们。
陈旧的内容不仅仅是旧的,而且还超过了caching应该问服务器是否有新的副本(重新validation)的一个点。 所以这个警告是说如果你真的更新了服务器的拷贝,caching还是会传递它的旧版本的。 这可能是HTTP应用程序行为中的一个非常严重的破坏,特别是当涉及到.js时。
这种情况通常是由pipe理员configuration一些违反HTTP重新validation要求的refresh_pattern设置造成的。 例如,忽略*选项强制一个对象被作为 – 是从caching而不是重新validation。
由于这个响应没有Cache-Control头,所以Squid使用refresh_pattern min / pct / max值来计算过时的年龄。 您可能需要考虑增加这些值,以使对象正常HIT生命周期更长,而不是忽略/违反HTTP要求。