Szenario:
Ich habe eine Cloudfront-Distribution vom benutzerdefinierten Ursprung (meinem Server) bis zum progressiven Streaming einer Liste von mp4-Videodateien eingerichtet.
Diese Dateien werden geloopt und über das native HTML5-Video-API von Chrome wiedergegeben. Jedes Mal, wenn das Video beendet wird, wird eine weitere Anfrage an die Datei gesendet.
Wenn Sie die Datei von meinem Server wiedergeben, gibt Chrome
zurück %Vor%bei jeder Anfrage, während Chrome bei der Wiedergabe derselben Datei aus CloudFront die Datei niemals zwischenspeichert und bei jeder Anfrage herunterlädt!
Dies sind die Antwortheader von Amazon CloudFront in Chrome:
%Vor%Antwort Header in Chrome der gleichen Datei von meinem Server (Herkunft):
%Vor%Vermisse ich etwas?
Vielleicht liegt der Grund daran, dass der Header Keep-Alive
aus der CloudFront-Antwort fehlt? oder vielleicht in der verschiedenen HTTP-Protokoll-Version (1.0 vs 1.1)?
UPDATE:
Ich habe auch Expires und Cache-Controls Header hinzugefügt, nichts hat sich geändert. Dies macht leider ziemlich nutzlos gefährlich und kombiniert HTML5 Video API und Amazon CloudFront.
Ein Screenshot aus dem Inspektor, wie Sie sehen können, wird die Datei in jedem Loop erneut heruntergeladen: Ссылка
Dies ist ein weiterer Screenshot mit der Datei vom lokalen Server geladen: Ссылка
UPDATE 2:
Dies scheint nicht unbedingt CloudFront zu sein. Nach verschiedenen Tests scheint Chrome das Video nicht zu cachen, wenn
1) Die Datei ist größer als 2 MB
2) Der Header Content-Range
beginnt nicht bei 0 (siehe das obige Beispiel)
Und ich denke, es bezieht sich nur auf die native HTML5-Video-API und ihren Teil-Content-Status.
Aus Ihrer CloudFront-Antwort:
HTTP / 1.0 206 Teilinhalt
HTTP / 1.0 enthält keinen Antwortcode 206 (der in HTTP / 1.1 hinzugefügt wurde), sodass der Cache-Layer von Chrome die erneute Verwendung der Antwort verweigert. Weitere Chrome-spezifische Details finden Sie in Ссылка . Die kurze Antwort lautet jedoch, dass CloudFront 206 Antworten als HTTP / 1.1 und nicht als / 1.0.
Es ist kein Verfalls- / Cache-Steuerkopf angegeben. Chrome kann beim Zwischenspeichern von Elementen (insbesondere wenn sie über Javascript dynamisch dem DOM hinzugefügt werden) wirklich etwas Besonderes sein, wenn kein Verfallsheader vorhanden ist.
von Google:
Es ist wichtig, für alle cachefähigen Ressourcen eines der Maxima von Expires oder Cache-Control und eines von Last-Modified oder ETag anzugeben. Es ist überflüssig, sowohl Expires als auch Cache-Control: max-age anzugeben oder sowohl Last-Modified als auch ETag anzugeben.
Tags und Links google-chrome apache amazon-cloudfront