2016-05-06 26 views
0

Angesichts der neuen Cloudflare-Unterstützung für HTTP2-Server-Push versuche ich eine AJAX-Anfrage vorab zu laden, die am Ende des HTML-Body in Javascript läuft. Das Testen erfolgt in Chrome Canary. Die Anforderung wird in den Headern durchgeführt, sodass sie bei erneuter Anforderung zum sofortigen Laden zwischengespeichert werden kann.HTTP2-Server Push-Preloading sendet keine Cookie-Daten

Der Header ist:

Link: </request>; rel=preload;

Dieser feuert erfolgreich auf diese https://www.example.org/request aus. Die Request-Header es zu dieser URL sendet sind:

akzeptieren: */*

Referer:https://www.example.org/request

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537,36 (KHTML, wie Gecko) Chrome/52.0.2726.0 Safari/537.36

X-Requested-With: XMLHttpRequest

Das Problem besteht darin, dass Cookie-Daten nicht mit der Preload-Anforderung gesendet werden, sondern mit dem vorhandenen Javascript gesendet werden. Ich kann überhaupt keine Informationen darüber finden, wie ich das beheben kann oder ob es korrekt ist. Es scheint keine Cookies in der Spezifikation zu geben, also sollte es vermutlich wie jede andere Art von Anfrage gehandhabt werden.

Antwort

2

Server Push schiebt Daten-TCP im Wesentlichen nach nur einer TCP-Anforderung vom Client an den Client herunter. Die einzige Möglichkeit, die der Client erhält, um Daten von dem Client zu erhalten, ist in der ersten Anfrage. Clients können den Server nicht zurück an den Server senden.

HTTP2 Server Push Diagram

Wenn es um Cookies kommt; Sie müssen sie von der ursprünglichen Anforderung abrufen. Wenn Daten übertragen werden, hat der Server keine Möglichkeit, zusätzliche Header zu empfangen. Server-Gesendete Ereignisse oder WebSockets können uns hier helfen .

Wie in RFC 7540 angegeben.

Abschnitt PUSH_PROMISE 4.3 dieses RFC geht ins Detail darüber, wie es einen Header Block Fragmente enthalten kann.

Lassen Sie mich verlassen Sie mit dem folgenden Zitat:

HTTP 2.0 Server-Push ist kein Ersatz für Technologien wie Server-Sent Events (SSE) oder WebSocket. Ressourcen, die via HTTP 2.0 Server Push geliefert werden, werden vom Browser verarbeitet, blubbern aber nicht mit dem Anwendungscode auf - es gibt keine JavaScript-API, um Benachrichtigungen für diese Ereignisse zu erhalten .

Es gibt Node.js Code-Beispiele, wie Sie diese in implementieren können: Innovating with HTTP 2.0 Server Push

+0

Danke für die ausführliche Antwort.Die Reihenfolge ist mir jetzt klar, aber warum würde es verhindern, dass ein Cookie gesendet wird, das vor der aktuellen Sammelanfrage gesetzt wurde? Persistente Sitzungs-ID, zum Beispiel. Es besteht keine Notwendigkeit, etwas zu erhalten. – StackOverflowAcc