2016-03-21 14 views
4

Ich habe einen Apache mit http2, und ich habe einen Server Push von Dateien gemacht, die ich im Browser Cache speichern möchte, aber es tut nicht und ich weiß nicht warum.Wie kann ich Dateien im Browser-Cache speichern, nachdem ich sie mit einem Server-Push gedrückt habe?

Ich habe den Push mit einer PHP-Datei, die folgende gemacht.

header('Link: <'https://www.myweb.com/mypath'>;rel="preload";as="video"', FALSE); 

Aus meiner Sicht ist der Server-Push funktioniert, weil ich die Anfragen an den Server im access_log sehen können, aber ich denke, dass die Dateien auf dem Browser-Cache gespeichert werden sollen, aber es funktioniert nicht.

Ich versuche, einen Server Push einer Datei, und danach, fordern Sie diese Datei und holen Sie sie aus dem Cache (siehe auf der Netzwerkkonsole von Chrome "aus dem Cache").

Dank

+0

Haben Sie die 'Cache-Control'-Header des Push-Inhalts verifiziert? Welche hat es? Man kann 'public, max-age = somevalue',' expires', 'etag' und' last-modified' einstellen. Wenn auf der anderen Seite "private", "no-store" oder "no-cache" gesetzt sind, hilft Ihnen der Server Push nicht weiter. Server push einfach die Daten in den lokalen Cache des Webbrowsers legen. Der 'Cache-Control'-Header gibt an, ob die Daten aus dem Cache verwendet werden und wie lange sie verwendet werden. – Oleg

+0

Ich habe darüber nachgedacht, aber ich weiß nicht, wo ich diese Parameter einstellen soll. Wenn ich die URL der Datei, die ich dränge, einstelle, wird die Datei heruntergeladen und im Cache gespeichert, weil sie die Parameter hat, die Sie angegeben haben. Aber es scheint, dass wenn ich den Push mache, er keinen Parameter hat. Ich weiß nicht, ob ich einen Parameter in der Zeile des Push (Header ...) setzen muss. – Elo

+1

IMO, das Konfigurieren von Caching auch für eine HTTP/1.1-Website ist zu jeder Zeit des Jahres schwierig. Die Kombination mit HTTP2 Push ist noch schwieriger. [Hier ist ein Artikel] (https://www.shimmercat.com/en/info/articles/caching/) mit einigen Details zum Kombinieren des Abfrageparameters, Push und so weiter. Volle Offenlegung, wir haben einen Großteil des Servers erstellt, nur um das richtig zu machen, und wir sind immer noch auf dem Weg. – dsign

Antwort

0

Alles, was Sie sagte, war wahr, und ich hatte es auf meinem Code, aber das Problem war, auf das Verständnis des Google Chrome Cache speichern.

Wenn Sie eine Datei mit Server Push über eine HTTP2-Verbindung senden, wird die über Server Push angeforderte Datei als Antwort an den Client gesendet. Google Chrome speichert sie jedoch nicht im Google Chrome-Cache, bis die Datei vom Browser angefordert wurde .

Zum Beispiel: Der Server sendet die Antwort von index.html mit seiner stylesheet.css (diese mit Server Push gesendet). Das Stylesheet wird nur in Google Chrome Cache gespeichert, wenn Google Chrome die Stylesheet.css anfordert (der Client hat nur den Index-HTML angefordert und das Stylesheet gedrückt). Wenn Google Chrome es nicht anfordert, handelt es sich um einen nicht beanspruchten Push, der nicht im Cache gespeichert wird.

Wenn Sie Erfolg haben und die Seite neu laden, sehen Sie in Google Chrome "aus dem Cache".

Danke für Ihre Zeit.