2017-06-07 3 views
2

In einem Handler durch eine Seitennavigation ausgelöst holen, habe ich versucht, dies zu tun: IchWie Cookies setzen auf eine Antwort in einem Serviceworker

return event.respondWith(new Response('Hello!', { 
    headers: { 
    "Set-Cookie": "TestCookie=foo; path=/; Max-Age=60;" 
    "TestHeader": "foo" 
    } 
})); 

dann im Browser eine beliebige URL geladen, und bekam die „Hallo ! " Karosserie. In Chrome Devtools sehe ich die TestHeader im Netzwerkbereich eingestellt. Der Cookie wird jedoch weder im Netzwerkfenster noch im Fenster "Anwendung> Cookies" angezeigt. document.cookie erzeugt es auch nicht.

Die Anfrage wird durch eine Seitennavigation eingeleitet. Es besteht also keine Möglichkeit, credentials: "include" auf der Registerkarte "Browser" für den Abruf festzulegen.

Ist es möglich, einen Cookie zu einer Antwort im ServiceWorker hinzuzufügen? Wenn nicht, ist es möglich, Cookies auf andere Weise zu schreiben?

Antwort

1

Es gibt einige relevante Informationen in der Fetch-Spezifikation.

Per https://fetch.spec.whatwg.org/#forbidden-response-header-name:

Ein verbotener Antwort-Header-Name ein Header Name ist, ist eine Byte-Groß- und Kleinschreibung Übereinstimmung für eines der folgenden:

  • Set-Cookie
  • Set-Cookie2
Und

dann wie unter Ziffer 6 in https://fetch.spec.whatwg.org/#concept-headers-append:

Andernfalls, wenn Wache ist "Antwort" und der Name ist eine verbotene Antwort-Header-Namen, Rückkehr.

Diese Beschränkung auf dem Hinzufügen des Headers Set-Cookie trifft entweder auf neue Response Objekte mit einem anfänglichen Satz von Headern Konstruieren oder das Hinzufügen von Header in der Tat nach der zu einem bestehenden Objekt Response.

Es gibt einen Plan zum Hinzufügen von Unterstützung für das Lesen und Schreiben von Cookies innerhalb eines Service Worker, aber das wird einen anderen Mechanismus als die Set-Cookie Header in einem Response Objekt verwenden. Es gibt mehr Informationen über die Pläne in this GitHub issue.