【发布时间】:2019-02-20 07:55:26
【问题描述】:
我的应用在此处加载视频:https://core.arc.io/guanzo/VideoOfPeopleWalking.mp4
它使用 Range 请求标头以 16Kb 的块从另一个来源加载视频。我的服务器设置了响应头Access-Control-Max-Age
到 10 分钟以防止多余的 OPTIONS 请求。
访问该链接(它是一个 HTML 页面),打开网络工具,观察获取 16Kb 块大约需要 1 秒。
现在检查“禁用缓存”,您应该会看到请求完成的速度快了很多,并且看起来有更多的并发请求。这与预期的行为相反,因为每个请求都必须触发并等待 OPTIONS 请求。
如果启用缓存,请求应该会更快,不是吗?这是怎么回事?
这是 GIF 格式的复制品:https://i.gyazo.com/ec5941829031cdd4dc684a3b53ec6c39.mp4
注意:块存储在 IndexedDB 中,因此如果您刷新页面,则需要清除 IndexedDB 以强制触发所有请求。
编辑:过滤掉任何 firestore 请求,我不确定为什么会触发这些请求,但它应该与我的问题无关。
编辑:一条新线索! https://i.gyazo.com/bd887533a42868f748564ccda4451881.png
选中“禁用缓存”后,Chrome 将重复使用与“连接 ID”列中相同的 TCP 连接。从表面上看,这应该会使请求更快。
【问题讨论】:
-
有什么方法可以重现你在 gif 中所做的事情吗?
-
您应该能够访问我发布的链接(它指向一个 HTML 页面),并执行我在问题中描述的相同步骤。
-
优秀的自我回答问题。这真的很有用。
标签: javascript google-chrome http cors browser-cache