(Apache)将inode放入ETag的目的是什么?
网络上有大量文章详细说明了为什么您不想使用Apache的默认inode-mtime-size格式来存储ETags。
但是我还没有阅读任何可能促使首先将Apache纳入inode的内容。 从表面上看,只有当需要区分同一资源的八位字节传真时才有用,但这肯定与ETags的目的相反。
Apache的作者并不知道他们对互联网标准的草率处理,所以我觉得我必须错过一些东西。 任何人都可以详述吗?
编辑:我问这里,而不是在ServerFault.com,因为我正在实施一个Web服务器,而不是管理一个。 要详细了解为什么这是一个坏主意,请参阅例如这里或这里。 所有这些文章都推荐相同的东西:从etags中删除inode。 问题是,他们在那里有什么好处吗?
这似乎是人们可以通过错误猜测什么是常见情况,或者通过默认情况下宁愿超过性能的正确性来轻易做到的事情,只要存在一丝怀疑。
请允许我编写一个关于它如何消失的故事:
他们很早就决定,由于性能原因,内容上的散列/校验和是一个坏主意。 “谁知道这个文件有多大?我们无法一直重新计算这些文件......”所以他们决定大小和日期让你非常接近。
“但是,等等,”A人士说,“没有什么能保证你没有文件大小的冲突,事实上,有些情况下,比如固件二进制文件,当文件大小总是相同的时候,几个是完全可能的同时从开发机器上传,因此这些不足以区分不同的内容。“
B人:“嗯,好点,我们需要与文件内容紧密相连的东西,加上修改过的时间,可以确定它是否是相同的内容。”
Person A:“inode怎么样?现在,即使他们重命名了这些文件(例如,他们可能会将”推荐“改为另一个文件,例如),默认的etag将会正常工作!”
B人:“我不知道,inode似乎有点危险。”
人A:“那么,会更好?”
人B:“是的,很好的问题,我想我不能想到它有什么特别的错误,我只是对它有一个普遍的不好的感觉。”
人A:“但至少它保证你会下载一个新的,如果它发生了变化,最糟糕的情况是你下载的次数比你需要的要多,而且任何知道他们不必担心的人都可以转向它关了。”
人B:“是的,这很有道理,在大多数情况下它可能很好,而且它比简单的替代方案好。”
免责声明:我没有任何关于Apache实施者可能一直在想什么的内部知识。 这全是手头的猜测,并试图构成一个似是而非的故事。 但我确实看到这种事情经常发生。
你永远不知道你没有想到的是什么(在这种情况下,服务于相同文件的冗余负载均衡服务器比不必担心大小+时间冲突更为典型)。 负载均衡器不是apache的一部分,这使得更容易进行这种监督。
另外,这里的失败模式是,你没有完全有效地使用缓存(不是你得到错误的数据),虽然很烦人,但这可以说更好。 这表明,即使他们考虑到了这一点,他们也可以合理地假设有兴趣设置负载平衡器的人也可以通过调整其配置细节来确定。
PS:这不是关于标准。 没有指定你应该如何计算etag,只是它应该足以说明内容是否已经发生变化,具有很高的概率。
链接地址: http://www.djcxy.com/p/43293.html上一篇: What is the purpose of (Apache) putting inode into an ETag?