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