TweedeKamerDerStaten-Generaal / OpenDataPortaal

GitHub van het officiële Open Data Portaal van de Tweede Kamer der Staten-Generaal.
https://opendata.tweedekamer.nl
49 stars 3 forks source link

Toestaan van Cross-Origin Resource Sharing bij OData API #71

Closed ThijsRay closed 1 year ago

ThijsRay commented 2 years ago

Het is momenteel niet mogelijk om de OData API aan te roepen op een ander domein dan https://gegevensmagazijn.tweedekamer.nl

Voorbeeld

Gegeven het volgende stukje Javascript

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://gegevensmagazijn.tweedekamer.nl/OData/v4/2.0/Document(7a9b77f1-d230-4a00-9856-2f0f8e967e62)");
xhttp.send();

Dan laat de browser weten dat dit niet mogelijk Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://gegevensmagazijn.tweedekamer.nl/OData/v4/2.0/Document(7a9b77f1-d230-4a00-9856-2f0f8e967e62). (Reason: CORS request did not succeed). Status code: (null).

Oplossing

De volgende HTTP header kan worden toegevoegd aan de response van de OData API Access-Control-Allow-Origin: * Dit staat toe dat de browser vanuit elke website een verzoek aan https://gegevensmagazijn.tweedekamer.nl/OData/ mag doen. Dit maakt het mogelijk om applicaties te maken die direct gebruik maken van de OData API, zonder dat daar een extra back-end server tussen hoeft te staan.

Meer informatie over CORS is te vinden op https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

OpenDataPortaal commented 2 years ago

Goede suggestie en bedankt voor de heldere uitleg. Het zou inderdaad handzamer zijn als er zonder tussenkomende server vanuit een browser direct met de API verbonden kan worden. Dit gaat we na een impact- en veiligheidsanalyse op de ontwikkelwensenlijst plaatsen. Op dit moment zijn we bezig de ontwikkelwensen van een prioritering te voorzien zodat we na een periode stabiel gedraaid te hebben ermee aan de slag kunnen.

OpenDataPortaal commented 1 year ago

We hebben dit uitgezocht met een impact- en veiligheidsanalyse. Dat blijkt helaas niet te kunnen. De oplossing blijft daarom dat verzoeken via de huidige manier gedaan moeten worden.