Ich habe nach den spezifischen Sicherheitsgründen gesucht, warum dies hinzugefügt wurde. Es war eine Art WTH-Moment, als ich cors implementierte und sah, dass alle Header zurückgegeben wurden, aber ich konnte nicht über Javascript darauf zugreifen.
Ich habe nach den spezifischen Sicherheitsgründen gesucht, warum dies hinzugefügt wurde. Es war eine Art WTH-Moment, als ich cors implementierte und sah, dass alle Header zurückgegeben wurden, aber ich konnte nicht über Javascript darauf zugreifen.
Antworten:
CORS ist so implementiert, dass es nicht gegen Annahmen verstößt, die in der Welt vor CORS getroffen wurden, die nur denselben Ursprung hat.
In der Pre-CORS-Welt könnte ein Client eine originensübergreifende Anforderung auslösen (z. B. über ein Skript-Tag), die Antwortheader jedoch nicht lesen.
Um sicherzustellen, dass CORS diese Annahme nicht verletzt, muss der Server gemäß der CORS-Spezifikation dem Client explizite Berechtigungen zum Lesen dieser Header (über den Access-Control-Expose-Headers
Header) erteilen . Auf diese Weise verhalten sich nicht autorisierte CORS-Anforderungen wie in einer Welt vor CORS.
Das ist eine ziemlich gute Frage. Wenn Sie http://www.w3.org/TR/cors/#simple-response-header durchsehen , ist nicht klar, warum Sie dies tun möchten oder müssen.
Die CORS-Spezifikation legt großen Wert auf die Idee, dass Sie einen Handshake vor der Anforderung benötigen, bei dem der Client nach einer Art von Verbindung fragt und der Server antwortet, dass dies zulässig ist. Dies ist möglicherweise nur ein weiterer Aspekt davon .
Standardmäßig ist die Länge des Inhalts kein zulässiger Header, daher bin ich auf dasselbe Problem gestoßen (später, als ich auf WebDAV zugreifen musste und die zulässigen Parameter ändern musste). CORS macht (für mich) wirklich keinen Sinn ) an erster Stelle, also würde es mich nicht überraschen, wenn Schwaden davon launisch sind.
Hier ist der Grund, warum Access-Control-Expose-Header benötigt werden:
Access-Control-Expose-Headers (optional) - Das XMLHttpRequest 2-Objekt verfügt über eine getResponseHeader () -Methode, die den Wert eines bestimmten Antwortheaders zurückgibt. Während einer CORS-Anforderung kann die Methode getResponseHeader () nur auf einfache Antwortheader zugreifen. Einfache Antwortheader sind wie folgt definiert:
Wenn Clients auf andere Header zugreifen können sollen, müssen Sie den Header Access-Control-Expose- Headers verwenden. Der Wert dieses Headers ist eine durch Kommas getrennte Liste von Antwortheadern, die Sie dem Client zur Verfügung stellen möchten.
Weitere Informationen finden Sie unter dem Link https://www.html5rocks.com/en/tutorials/cors/.
Viel Spaß beim Codieren !!