启用缓存时,HTML5视频永远不会加载(在Chrome中)

时间:2017-06-12 14:57:10

标签: google-chrome caching video html5-video

我的网站上有一个简单的视频,只不过是:

import System.Mem.StableName

class Same a where
  equals :: a -> a -> IO Bool

instance Same a where
  equals = equalsStable

instance Eq a => Same a where
  equals = do
    b <- equalsStable x y
    return (x == y || b)

equalsStable :: a -> a -> IO Bool
equalsStable x y = do
  n1 <- makeStableName x
  n2 <- makeStableName y
  return (n1 == n2)

当我在devtools打开时尝试加载视频时,复选框&#34;禁用缓存&#34;检查,发生以下情况:

cache disabled

视频播放正常。

但是当复选框&#34;禁用缓存&#34;没有检查,我看到了:

cache enabled

只是&#34;加载启动&#34;,仅此而已,视频永远停留在此状态。

多次尝试,我可以肯定地说缓存状态是唯一有所作为的东西。 在Firefox中,相应的选项无效,视频在两种情况下都能正常播放。

以下是禁用缓存的请求标头(省略User-Agent和Cookie):

<video poster="...">
  <source src="some/path/to/file.mp4" type="video/mp4">
</video>

启用缓存后,第一个请求的标头(返回206):

Host: localhost:9910
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept-Encoding: identity;q=1, *;q=0
Accept: */*
Referer: http://localhost:9910/
Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4
Range: bytes=0-

第二个请求(返回200):

Host: localhost:9910
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
Accept: */*
Referer: http://localhost:9910/
Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4
Range: bytes=0-

除了第一种情况下显而易见的Host: localhost:9910 Connection: keep-alive Accept-Encoding: identity;q=1, *;q=0 Accept: */* Referer: http://localhost:9910/ Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4 Range: bytes=360448-393474 If-Range: Mon, 12 Jun 2017 13:07:36 GMT Pragma: no-cache之外,很容易看出,在第三种情况下,Cache-Control: no-cache标题的值不同,{{1}也是Range标题已添加。我看了about it,但我仍然不明白究竟发生了什么:对这个第3个请求的回复包含If-Range - 等于last-modified: Mon, 12 Jun 2017 13:07:36 GMT值,所以,如果我理解正确地说,资源应该被认为是不变的,并且应该返回具有部分数据的规范206。

我对所有这些标题都不满意,所以我的问题是:

  • 为什么会出现If-Range的此请求?
  • 为什么视频无法完成加载,尽管所有请求都成功了?
  • 毕竟,我该怎么做才能制作视频游戏?我应该在前端以不同的方式请求它,或者它是服务器设置的问题吗?

1 个答案:

答案 0 :(得分:0)

好的,它是由服务器造成的。不知道我们的后端开发人员到底修正了什么,但至少它不是浏览器问题。

无论如何,仍然感兴趣的是,尽管所有请求都成功,视频仍然无法加载。开始玩可能缺少什么?