清除缓存无法解决视频问题。

3

关于我正在做的事情:

  • 我正在做一个可以搜索视频的网站。

- 我展示了一些内容行,每行都嵌入了一个迷你剪辑,显示了一个视频。

  • 我使用jQuery.AJAX来检索这些视频,因此无需重新加载页面。

  • 一切正常。我展示了视频,并且可以从这些行中播放它们。

  • 对于页面的管理员,我有一个按钮,可以覆盖这些视频。这样就会把新视频放到原先的位置上,替换掉旧的视频。我在服务器端用PHP编写以下代码实现:


unlink($destination_path.$video_name.".mov");
move_uploaded_file($_FILES['newVideo']['tmp_name'], $destination_path.$video_name.".mov");

然后我使用 header("Location: index.php"); 跳转到主页面。

问题:

当我在网站中播放新视频时,我看到的是旧视频而不是新视频。

  • 我用 F5 清除缓存:无效

  • 我用 Ctrl+F5 清除缓存:无效

  • 我在页面顶部设置了以下内容:

无效

  • 我关闭浏览器并重新打开(或者打开一个新的):有效

一些额外信息:

  • 视频的 preload 属性设置为 none。所以我没有缓存地检索我的视频。它们在我按下播放按钮时开始加载。

  • 文件被很好地覆盖,并且我也检查了我指向的位置(与之前相同的位置和文件)。

  • 如果我去视频的位置,新的视频在那里,旧的已经消失了。

  • 所有浏览器都发生了这种情况。

看起来浏览器中有一些缓存问题,或者我的服务器非常不理睬我。还有其他清空缓存的方法吗?或者这里发生了什么事情?


F5不能清除缓存。CTRL + F5也不能清除缓存,它会进行硬重载,重新加载该页面上的所有包含资源。所有其他资源都将从缓存中加载(如果存在)。每个现代浏览器都有一个清除历史记录/cookie等的按钮。https://support.mozilla.org/en-US/kb/how-clear-firefox-cache https://support.google.com/chrome/answer/95582?hl=en - Charlotte Dunois
“视频的preload属性被设置为none。因此,我检索我的视频时没有缓存。” - 预加载与缓存关系不大;它只决定浏览器是否应自动开始加载视频数据,或仅在用户开始播放时才加载。但是,当然,无论preload设置为什么,浏览器都可以从其缓存中获取视频数据。 - CBroe
1个回答

2
你可以尝试在html页面中的视频网址上添加时间戳。
$filepath = $destination_path.$video_name.".mov";
$videoUrl = $wwwpath . $filepath . "?" . filemtime($filepath);

1
这可能会解决浏览器缓存文件的问题,但如果允许缓存(并且由于流量大而非常受欢迎),这是错误的方式,因为浏览器始终从服务器请求文件,而不是从缓存中获取它(如果已被缓存)。 - Charlotte Dunois
夏洛特,你是对的。我更新了我的答案。现在我使用文件时间作为令牌。 - ESP32
它起作用了!我仍然不知道为什么我的浏览器这样对我,但是它像魔法一样运行。谢谢! - Urien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接