Preflight/OPTIONS request faalt icm Reverse Geocoder (opgelost)

Wanneer ik een XHR-request uitvoer naar de Reverse Geocoder, faalt de OPTIONS (preflight)-request.

Zo geeft OPTIONS https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.097900390625001&Y=52.26815737376817 terug:

Access to XMLHttpRequest at 'https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.141159057617188&Y=52.24377883252849' from origin 'http://localhost:9000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status..

Ik zie inderdaad dat 403 Forbidden wordt teruggegeven door de server. Hierdoor kan de daadwerkelijke GET-request niet uitgevoerd worden door de browser.

Wanneer ik bovenstaande URL “gewoon” als GET uitvoer, door 'm bijvoorbeeld in de adresbalk te plakken, gaat 't wel gewoon goed.

Hoi @hendrikswis

Zoals je aangeeft een “gewoon” request werkt wel:

curl -i -X OPTIONS "https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.141159057617188&Y=52.24377883252849"

Nu ben ik niet echt een frontend developer, maar XMLHttpRequest lijkt mij een javascript dingetje…

De error die je krijgt is op http://localhost:9000 is dat de machine/omgeving waar je mee aan het developen bent? Want dan lijkt het erop dat het request niet naar geodata.nationaalgeoregister.nl (waardoor de OPTIONS req failed) kan worden gestuurd, maar naar je lokale dev omgeving?

Lijkt mij op eerste blik een CORS issue met je huidige opstelling.

Je zou kunnen proberen om een CORS policy in te stellen:

Access-Control-Allow-Origin: https://geodata.nationaalgeoregister.nl/

Hoe je deze CORS Policy instelt, verschilt per omgeving en gebruikte frameworks en talen.

Het CORS preflight request, wat je browser verstuurd, ziet er volgens SO zo uit met cURL:

curl -H "Origin: http://localhost:9000" \
  -H "Access-Control-Request-Method: GET" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS --verbose  "https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.141159057617188&Y=52.24377883252849"

Dit request faalt inderdaad met een 403. Het probleem is de header Access-Control-Request-Method: GET, aangezien bovenstaand request zonder deze header wel een 200 response oplevert.

curl -H "Origin: http://localhost:9000" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS --verbose  "https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.141159057617188&Y=52.24377883252849"

Er gaat dus aan onze kant (PDOK) iets fout met het verwerken van het preflight CORS request. We gaan hiermee aan de slag.

@daneng de Access-Control-Allow-Origin is niet het probleem, deze header is een response header die op de server (in dit geval de reverse geocoder) geconfigureerd moet worden. Deze header staat goed geconfigureerd, zie de response headers van een HTTP GET request op https://geodata.nationaalgeoregister.nl/locatieserver/revgeo?X=4.141159057617188&Y=52.24377883252849:

HTTP/1.1 200 
Date: Wed, 14 Jul 2021 09:21:58 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2081
X-Cnection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: SOAPAction,X-Requested-With,Content-Type,Origin,Authorization,Accept
X-Cnection: close
2 likes

@hendrikswis we hebben het issue met de preflight CORS request opgelost. We handelden zoals door @antonbakker aangegeven de request idd niet goed af. Ik hoop dat hiermee je probleem is opgelost.

2 likes

Yes, veel dank voor de snelle fix :slight_smile:

1 like