Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果其中一个web服务器的时钟稍微有点走时,缓存会工作吗?_Ruby On Rails_Caching_Browser Cache_Cache Control - Fatal编程技术网

Ruby on rails 如果其中一个web服务器的时钟稍微有点走时,缓存会工作吗?

Ruby on rails 如果其中一个web服务器的时钟稍微有点走时,缓存会工作吗?,ruby-on-rails,caching,browser-cache,cache-control,Ruby On Rails,Caching,Browser Cache,Cache Control,据说web服务器的时钟必须相同,Expires和Cache Control报头才能工作?为什么呢?他们不能在一秒钟或几分钟内离开吗 如果缓存应该可以使用1年,那么在一个或一些web服务器上,几分钟甚至几小时的时间差不是很重要吗 在这本书中,据说: 请注意,为了使此[缓存] 工作,所有的应用服务器 必须返回相同的时间戳。这 意味着他们必须有自己的时钟 同步的。如果其中一个漂流 不同步,您将看到不同的 随机时间戳和缓存 不行。在这种情况下,浏览器 将多次请求相同的资产 一次又一次,我甚至认为他们没有

据说web服务器的时钟必须相同,Expires和Cache Control报头才能工作?为什么呢?他们不能在一秒钟或几分钟内离开吗

如果缓存应该可以使用1年,那么在一个或一些web服务器上,几分钟甚至几小时的时间差不是很重要吗

在这本书中,据说:

请注意,为了使此[缓存] 工作,所有的应用服务器 必须返回相同的时间戳。这 意味着他们必须有自己的时钟 同步的。如果其中一个漂流 不同步,您将看到不同的 随机时间戳和缓存 不行。在这种情况下,浏览器 将多次请求相同的资产 一次又一次,我甚至认为他们没有 改变你可以用像 Firefox的实时HTTP头文件 验证缓存是否确实正确 工作


请注意,这是特定于Rails的,并且仅在有多个web服务器提供数据服务的情况下


假设缓存使用时间戳存储数据,如果服务器的时间戳不同,则缓存将始终在其中一个服务器上失效,即具有“较旧”时间戳的服务器,因为它将始终认为文件最近已更新,因此将请求视为缓存未命中。

如果您在所有主机上运行ntpd,并且确实如此,你不觉得吗?他们会非常接近的。它与头的关系要比与在URL末尾生成?1232285206的缓存控制器的关系小。从1970年1月1日00:00:00开始,这仅仅是Unix纪元时间秒,因此对于可以缓存的内容来说,几秒钟之内就可以了。ntpd通常保持四分之一秒或更小的公差。在对多台时间服务器进行的一系列NTUpdate测试中,我的计算机的关机时间从未超过.15秒。

这是由于其他原因造成的吗?因为如果它只是过期和缓存控制,那么稍微关闭的时间应该无关紧要。你是说时钟必须精确到秒?如果一台机器在几小时后甚至一小时后能关闭一秒钟,那该怎么办?那么所有的机器必须每半小时同步到完全相同的时间?这取决于应用程序是否会返回新的数据。请记住,发送头的是代码,这取决于它认为资产是否已更新。我必须重申,这是Rails特有的,不是浏览器缓存的属性。下面的答案中的一些注释让我怀疑您是否意识到,如果它是一个像1232285206这样的数字,那么不是每秒钟都重要吗?因为?1232285206和?1232285207将创建不同的URL。此外,即使精确到秒,是否会出现这样的情况:当一个控制器运行时,时间是12:03.99997,而在另一台机器上,控制器运行时的时间是12:04.000001,因此,如果数字被math.floorSure截断,它们将关闭一秒,但是很有可能你的资产不会在一秒钟内改变多次——它们只需要在处理请求时足够正确。当你改变你的资产时,陈旧的资产可能会被分发几乎整整一秒钟。如果您不能容忍一秒钟的过时时间,那么缓存您的资产可能不是一个好主意。但大多数网站可以处理一秒钟过期的缓存对象。如果服务器上的时钟关闭了10秒,那么您可能会发送11秒的过期数据。但实际上,只要运行ntpd,并保持快乐谢谢你的回答。大多数网站可以处理一秒钟过期的缓存对象是什么意思?决定是否重新加载某些内容的不是浏览器吗?你能具体说明一下吗。。。为什么web服务器不关心几秒钟的差异,工作的机制是什么,10秒钟的限制是什么?15?URL末尾的时间戳基于资产文件本身的mtime时间戳,而不是处理请求的时间。对不起,我之前误解了机制;如果此资产文件在不同的应用程序服务器上具有不同的MTIME,则该文件将以多个名称“缓存”,客户端可能需要多次下载,每种名称下下载一次。至于处理一秒钟过期的问题,只是大多数网站都不需要第二次准确的内容。