11

我无法弄清楚我需要在部分响应 (206) 上设置什么,以便 Google Chrome 和 Firefox 缓存发送到浏览器的字节数据。Internet Explorer 似乎对我的标题很满意,据我所知,Chrome 非常具体地说明了什么是有效的缓存响应。

背景:

我正在为一个长视频加载一个元素,并且我正在寻找同一视频中的剪辑。当我在剪辑之间寻找,然后回到第一个剪辑......而不是播放缓存的数据,它在另一个 206 请求中再次从服务器请求数据。

以下是这些请求之一的标题:

Request URL:http://localhost:51202/Stream/StreamVideo?videoFileGuid=e824795d-18af-43cb-935d-b793dbbe36fb
Request Method:GET
Status Code:206 Partial Content

Request Headers
GET /Stream/StreamVideo?videoFileGuid=e824795d-18af-43cb-935d-b793dbbe36fb HTTP/1.1
Host: localhost:51202
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/30.0.1599.101 Safari/537.36
Accept: */*
Referer: http://localhost:52309/Playlists/Playlist/ViewPlaylist?playlistGuid=165deee2-e5d3-435c-ac19-f2f7357cf6d2
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cookie: .ASPXAUTH=<snip>
Range: bytes=463809580-
Query String Parameters
videoFileGuid=e824795d-18af-43cb-935d-b793dbbe36fb

Response Headers
HTTP/1.1 206 Partial Content
Cache-Control: public
Content-Length: 421590265
Content-Type: video/mp4
Content-Range: bytes 463809580-885399845/885399846
Expires: Thu, 14 Nov 2013 08:54:30 GMT
Last-Modified: Fri, 01 Nov 2013 14:33:04 GMT
Accept-Ranges: bytes
ETag: 515e8d9b-87f4-4e49-ac64-17c33e091b4a
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
Content-Disposition: inline; filename="StreamVideo"
X-AspNet-Version: 4.0.30319
X-SourceFiles: =<snip>
X-Powered-By: ASP.NET
Date: Thu, 07 Nov 2013 08:54:46 GMT
X-Powered-By:ASP.NET
X-SourceFiles:=<snip>

有任何想法吗?

在 Internet Explorer 中,我可以看到请求包括我在服务器上处理的“If-Unmodified-Since”和“If-Match”值。Chrome 没有在请求标头中包含这些内容吗?我假设是因为原始响应没有给它提供缓存内容所需的东西。

IE 标头:

Key         Value
Request         GET /Stream/StreamVideo?videoFileGuid=e824795d-18af-43cb-935d-b793dbbe36fb HTTP/1.1
Accept          */*
If-Unmodified-Since Fri, 01 Nov 2013 14:33:04 GMT
If-Match        515e8d9b-87f4-4e49-ac64-17c33e091b4a
Range           bytes=884228096-885399845
User-Agent      Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Referer         <myURL>
GetContentFeatures.DLNA.ORG 1
Pragma          getIfoFileURI.dlna.org
Accept-Language     en-ZA
Accept-Encoding     gzip, deflate
Host            <myHost>
DNT         1
Connection      Keep-Alive
4

1 回答 1

1

我不知道 2017 年的确切状态(问题来自 2013 年),但至少今天你可以使用服务人员来解决这个问题。Service Worker 允许您根据自己的缓存逻辑在 js 进程中拦截请求并发送回响应,而无需实际访问服务器。

因此,虽然这不是您问题的直接解决方案,但它现在可能是一个可行的解决方法。

于 2017-11-01T17:43:14.840 回答