Freitag, 13. November 2015

Open-Data-Tankerkönig-API jetzt mit CORS-Unterstützung

Unser freies API für Echtzeit-Benzinpreise unterstützt jetzt auch CORS

Das hört sich ziemlich sonderbar an, hat aber einen einfachen Hintergrund: aus Sicherheitsgründen  erlauben Browser nicht ohne weiteres, dass JavaScript Daten von anderen Servern holt. Wenn das versucht wird, wirft der Browser eine Fehlermeldung und der Zugriff wird geblockt. Das heisst, JavaScript, das von einem Server geholt wird, darf erstmal nur auf diesen Server zugreifen -  und auf keinen anderen. Diese Problematik nennt man Cross-Origin Resource Sharing.

Workaround: JSONP

Als Workaround für dieses Problem wurde JSONP entwickelt. JSONP bedeutet "JSON mit Padding". JSONP sind JavaScript-Funktionen, die per <script>-Tag eingebunden und dann im Browser ausgeführt werden. Das ist ein unschöner Workaround, da ja dem fremden Server vertraut wird und dessen Code ungesehen ausgeführt wird.

Das Tankerkönig-API unterstützt schon immer das JSONP-Format.

Access-Control-Header

Um Cross-Origin Resource Sharing ohne Workaround zu ermöglichen, unterstützen moderne Browser die "Access-Control"-Header. D.h., wenn ein Server, der Daten liefert, diese Header richtig setzt, erlaubt er es dem Browser explizit, die Daten trotzdem zu holen. Der Browser muss dann kein (potentiell böses) JSONP-Script mehr ausführen, sondern darf die Daten direkt holen.

Diese Header im HTTP-Response sehen beim Tankerkönig-API seit ein paar Tagen so aus

Access-Control-Allow-Origin: * Access-Control-Allow-Headers: origin, x-requested-with, content-type, accept Access-Control-Allow-Methods: GET

Damit erlauben wir allen, Daten zu holen. Niemand muss sich Sorgen machen, dass ihm jemand böse Sachen uneterschiebt :-)

Links

Cross-Origin Resource Sharing (CORS)
JavaScript Object Notation JSONP



Keine Kommentare:

Kommentar posten