(Apache)将inode放入ETag的目的是什么?

时间:2009-09-28 20:49:25

标签: apache http etag inode

网上有很多文章详细说明了为什么你想要使用Apache默认的inode-mtime-size格式的ETag。

但我还没有阅读任何可能促使Apache首先包含inode的内容。从表面上看,只有在需要能够区分同一资源的八位字节八位字符传真时才有用,但这肯定与ETag的目的背道而驰。

Apache的作者并不以他们对互联网标准的草率处理而闻名,因此我觉得我必须遗漏一些东西。任何人都可以详细说明吗?

编辑:我在这里问而不是在ServerFault.com上,因为我正在实施一个Web服务器,而不是管理一个。要详细了解为什么这是一个坏主意,请参阅例如herehere。所有这些文章都推荐相同的东西:从你的etags中删除inode。问题是,他们在那里有什么优势吗?

1 个答案:

答案 0 :(得分:4)

对于普通情况的错误猜测,或者默认情况下,只要存在一丝疑问,通过偏好性能而不是性能,这似乎很容易做到。

请允许我编写一篇关于它可能如何消失的故事:

由于性能原因,他们很早就决定内容的哈希/校验和是个坏主意。 “谁知道文件有多大?我们无法一直重新计算这些文件......”所以他们决定大小和日期让你非常接近。

“但等等,”A人说,“没有什么可以保证你没有文件大小的冲突。事实上,有些情况,例如固件二进制文件,当文件大小总是相同的时候,它完全有可能那几个是同时从开发机器上传的,所以这些不足以区分不同的内容。“

B人:“嗯,好点。我们需要与文件内容有内在联系的东西。加上修改时间的东西,可以告诉你它是否是相同的内容。”

人A:“inode怎么样?现在,即使他们重命名文件(例如,他们可能将”推荐“更改为其他文件),默认的etag也能正常工作!”

B人:“我不知道,inode似乎有点危险。”

人A:“嗯,还有什么会更好?”

B人:“是的,好问题。我想我无法想到它有什么特别的错误,我只是对此感到普遍不好。”

人A:“但至少它可以保证你下载一个新的如果它被改变了。最糟糕的情况是你下载的次数比你需要的多,而且任何知道他们不必担心它的人可以把它关掉。“

B人:“是的,这是有道理的。对于大多数情况来说,它可能很好,而且似乎比简单的替代方案更好。”

免责声明:我对Apache实施者一直在思考的内容一无所知。这只是手工波浪的猜测,并试图构成一个似是而非的故事。但我当然看到这种事情经常发生。

你永远不知道你没想到的是什么(在这种情况下,服务于相同文件的冗余负载平衡服务器比不必担心大小+时间冲突更典型)。负载均衡器不是apache的一部分,这使得更容易进行这样的疏忽。

另外,这里的失败模式是你没有充分有效地使用缓存(不是你得到错误的数据),这可能会更好,虽然很烦人。这表明即使他们确实想到了这一点,他们也可以合理地假设有足够兴趣设置负载均衡器的人也可以调整他们的配置细节。

PS:这不是关于标准的。没有什么可以指定你应该如何计算etag,只是它应该足以判断内容是否已经改变,很有可能。