Terug naar begrippenlijst

Cross-Origin Resource Sharing (CORS)

Stel, je bouwt een front-end in React die data ophaalt van een externe API. Alles werkt lokaal, maar zodra je het online zet, krijg je een foutmelding: “Blocked by CORS policy”. Grote kans dat je te maken hebt met Cross-Origin Resource Sharing: een beveiligingsmechanisme dat voorkomt dat een website ongecontroleerd data opvraagt van een andere website of server.

Geschreven door Thijn de Haas

Zwaaiende emoji

Thijn Lead developer

Meer over Thijn

Inhoudsopgave

Je browser gedraagt zich als portier

Het internet is gebouwd op vertrouwen, maar dat vertrouwen heeft grenzen. Zonder beperkingen zou elke willekeurige website jouw data kunnen opvragen bij bijvoorbeeld je bank of je e-mailprovider. Om dat tegen te gaan, hebben browsers het same-origin policy ingevoerd: een webpagina mag alleen communiceren met bronnen van hetzelfde domein.

Maar… in de praktijk willen we juist vaak communiceren met andere domeinen, bijvoorbeeld een front-end op domein A die data ophaalt van een API op domein B. Dat is precies waar CORS om de hoek komt kijken.

Wat gebeurt er achter de schermen?

Als je browser een cross-origin verzoek doet, kijkt de server waar het verzoek naartoe gaat of dat is toegestaan. Dat doet hij via de CORS-header Access-Control-Allow-Origin. Staat daar jouw domein tussen? Dan wordt de data netjes doorgestuurd. Staat het er niet tussen? Dan wordt het verzoek geblokkeerd.

Voor simpele GET-verzoeken werkt dit vrij soepel. Maar bij bijvoorbeeld POST-verzoeken of custom headers voert de browser eerst een “preflight request” uit: een soort test om te checken of het verzoek is toegestaan. Pas bij goedkeuring volgt het echte verzoek.

Help! Mijn API mag er niet in

CORS-fouten zijn een klassieker bij webdevelopment. Je code is goed, je API werkt, maar de browser houdt je tegen. De oplossing ligt meestal bij de server: die moet expliciet toestaan dat jouw domein verzoeken mag doen. Dat kan door:

  • Een wildcard (*) toe te staan (alleen veilig bij publieke data)
  • Specifieke domeinen whitelisten via Access-Control-Allow-Origin
  • CORS correct configureren in frameworks zoals Express.js, Laravel of Django

Let op: voor gevoelige data is het belangrijk om alleen vertrouwde domeinen toegang te geven.

Veelgestelde vragen

Origin verwijst naar het protocol, domein en poort van de website. Dus https://example.com:443 is een andere origin dan http://example.com of https://api.example.com.

Omdat localhost vaak als “andere origin” wordt gezien. Je kunt dit tijdelijk oplossen via proxy-instellingen of CORS-configuratie op de server.

Niet echt. Browsers zijn streng. Je kunt CORS alleen ‘omzeilen’ door de server anders in te stellen, of tijdelijk met tools zoals een proxy of browserplugin.

Nee. Een firewall blokkeert verkeer op netwerk- of serverniveau. CORS is puur een browsermechanisme dat bepaalt wat er in de front-end mag gebeuren.

Thijn de Haas Lead developer

Meer over Thijn

Mijn programmeeravontuur begon rond mijn twaalfde, toen ik ontdekte dat je met code vrijwel alles kunt maken. Ik begon met het bouwen van kleine projecten en startte al snel mijn eigen hostingdienst, wat me veel leerde over maatwerkcode, serverbeheer en het koppelen aan websites. Deze kennis pas ik nu dagelijks toe in mijn werk aan websites en applicaties.

Als student Applicatieontwikkelaar liep ik drie stages bij Wux, waarbij ik tijdens de eerste stage mijn eerste bedrijf startte, deels op advies van Bo. Deze ervaringen vormden het fundament van mijn rol als lead developer en mede-eigenaar van Wux. Met een constante interesse in nieuwe technieken en het meedenken naar de beste oplossingen, zet ik mijn expertise dagelijks in om complexe vraagstukken op te lossen samen met mijn team.

Twee mannen in overleg tijdens het werk achter hun computerschermen
Zwaaiende emoji

Thijn Back-end developer

Op zoek naar slimme software-oplossingen die jouw bedrijf efficiënter maken?

Het team van Wux ontwikkelt maatwerk software die aansluit bij jouw behoeften. Neem vandaag nog contact op en ontdek hoe we jouw bedrijf elke dag succesvoller kunnen maken.

Meer over software