Je kent het wel: je bent op zoek naar informatie op het internet en opeens word je gebombardeerd met een hinderlijke foutmelding. “Deze bron is geblokkeerd vanwege het Cross-Origin Resource Sharing (CORS) beleid.” Maar wat betekent dat eigenlijk? CORS, oftewel Cross-Origin Resource Sharing, is een mechanisme waarmee een webpagina toestemming kan krijgen om bronnen, zoals afbeeldingen, scripts of stijlbladen, op te halen van een andere domeinnaam dan waarop de pagina zelf gehost is. We gaan dieper in op wat CORS is en waarom het zo belangrijk is voor het veilig en efficiënt gebruik van webapplicaties. Laten we meteen van start gaan.
Als je hebt gewerkt met webontwikkeling, heb je waarschijnlijk wel eens gehoord van CORS (Cross-Origin Resource Sharing). Maar wat houdt CORS precies in en waarom is het belangrijk?
Om te begrijpen wat CORS is, moeten we eerst begrijpen wat cross-origin communicatie inhoudt. Cross-origin communicatie treedt op wanneer een webpagina of een script op een bepaald domein (bijvoorbeeld “example.com”) probeert resources op te halen van een ander domein (bijvoorbeeld “api.example.com”). Dit kan bijvoorbeeld gebeuren wanneer een JavaScript-bestand van een ander domein wordt geladen of wanneer een AJAX-verzoek wordt gedaan naar een andere server.
Om veiligheidsredenen is cross-origin communicatie standaard niet toegestaan in moderne webbrowsers. Dit principe staat bekend als hetzelfde-oorsprongsbeleid (same-origin policy), waarbij een webpagina alleen resources van dezelfde oorsprong kan ophalen. Dit beleid voorkomt dat kwaadwillende scripts van een ander domein toegang krijgen tot gevoelige gegevens op een webpagina.
Echter, er zijn legitieme redenen waarom je cross-origin communicatie wilt toestaan, zoals het ophalen van gegevens van een API van een andere server. En dit is waar CORS in beeld komt.
CORS biedt een mechanisme waarmee een server kan aangeven dat bepaalde cross-origin verzoeken zijn toegestaan. Door middel van speciale HTTP headers kan een server aangeven welke domeinen toegang hebben tot bepaalde resources.
Met CORS kunnen webontwikkelaars dus veilig cross-origin communicatie mogelijk maken. Het helpt bij het oplossen van het probleem van de same-origin policy door de server meer controle te geven over welke domeinen toegang hebben tot resources.
Om CORS te begrijpen, moeten we kijken naar de werking van de HTTP headers die worden gebruikt bij CORS-verzoeken.
Bij een cross-origin verzoek wordt een extra HTTP header, genaamd “Origin”, toegevoegd aan het verzoek. Deze header bevat het domein van waaruit het verzoek wordt gedaan.
De server kan vervolgens bepalen of het verzoek afkomstig is van een toegestaan domein. Als het verzoek wordt geaccepteerd, voegt de server een extra HTTP header toe, de “Access-Control-Allow-Origin” header, aan de reactie. Deze header bevat het domein dat toestemming heeft om de resource te benaderen.
In sommige gevallen, zoals bij bepaalde cross-origin verzoeken met speciale HTTP methoden (bijvoorbeeld PUT, DELETE), wordt er een preflight request gedaan voordat het eigenlijke verzoek wordt gedaan. Een preflight request is een verzoek met de HTTP methode OPTIONS om te controleren of het eigenlijke verzoek veilig kan worden uitgevoerd.
Tijdens de preflight request stuurt de browser extra informatie naar de server, zoals de mogelijke HTTP methoden en headers die tijdens het eigenlijke verzoek worden gebruikt. De server kan vervolgens beslissen of het eigenlijke verzoek wordt geaccepteerd door de juiste HTTP headers in de preflight response in te stellen.
Door middel van deze mechanismen biedt CORS een gestandaardiseerde manier om cross-origin communicatie mogelijk te maken, terwijl de veiligheid intact blijft.
In dit deel leer je hoe je CORS (Cross-Origin Resource Sharing) kunt gebruiken in webontwikkeling. CORS is een belangrijk mechanisme waarmee webbrowsers communicatie tussen verschillende domeinen mogelijk maken, wat essentieel is voor moderne webapplicaties.
Om CORS correct te gebruiken, moet je de server configureren om de juiste response headers terug te sturen naar de browser. Deze headers stellen de browser in staat om te bepalen of een verzoek vanuit een andere oorsprong moet worden geaccepteerd of geweigerd. Dit zijn enkele voorbeelden van server-side instellingen die je kunt gebruiken:
Als ontwikkelaar moet je ook weten hoe je CORS in de browser kunt afhandelen. Elk webbrowser heeft zijn eigen implementatie van CORS, waardoor er enkele browserspecifieke verschillen kunnen optreden. Dit zijn enkele tips om met CORS in de browser om te gaan:
Elke browser heeft zijn eigen manier om met CORS om te gaan, dus het is belangrijk om bekend te zijn met de specifieke eigenschappen en beperkingen van elke browser. Dit zijn enkele bekende verschillen:
Het is belangrijk om bekend te zijn met deze verschillen en indien nodig te zorgen voor specifieke configuraties of aanpassingen in je code om deze te omzeilen.
Door CORS correct te configureren op de server en op de juiste manier om te gaan met CORS in de browser, kun je succesvolle cross-origin communicatie mogelijk maken in je webapplicaties. Het begrijpen van de basisprincipes en het omgaan met browserspecifieke verschillen zal je helpen bij het efficiënt ontwikkelen van moderne webapplicaties.
Als je aan het werken bent met Cross-Origin Resource Sharing (CORS), kan je soms te maken krijgen met bepaalde foutmeldingen. Dit zijn een paar veelvoorkomende foutmeldingen die je tegen kan komen:
Deze foutmelding geeft aan dat er op de opgevraagde bron geen ‘Access-Control-Allow-Origin’ header is ingesteld. Dit betekent dat de bron niet toegankelijk is vanaf het domein waarvandaan het verzoek wordt gedaan.
Een mogelijke oplossing voor dit probleem is om de server zo te configureren dat de ‘Access-Control-Allow-Origin’ header wordt toegevoegd aan de reactie. Hiermee geef je aan welke domeinen toegang hebben tot de bron. Je kan bijvoorbeeld de waarde ‘*’ instellen om toegang te geven aan alle domeinen, of je kan specifieke domeinen opgeven.
Deze foutmelding geeft aan dat de opgegeven HTTP-methode niet wordt toegestaan door de server. De server geeft dit aan in de ‘Access-Control-Allow-Methods’ header in de preflight response.
Om dit probleem op te lossen, moet je ervoor zorgen dat de juiste HTTP-methode wordt toegestaan door de server. Dit kan gedaan worden door de serverinstellingen aan te passen en de ‘Access-Control-Allow-Methods’ header te configureren.
Als je te maken krijgt met CORS problemen en je weet niet zeker waar het probleem vandaan komt, kan je de volgende stappen volgen om het probleem te debuggen:
Naast het oplossen van fouten, zijn er ook enkele best practices die je kunt volgen om de veiligheid en prestaties van CORS-implementatie te verbeteren.
CORS-integratie kan een aantal beveiligingsrisico’s met zich meebrengen. Dit zijn enkele best practices om de beveiliging te verbeteren:
CORS kan van invloed zijn op de prestaties van je webapplicatie. Dit zijn enkele tips om de prestaties te verbeteren:
Met deze tips en oplossingen kan je mogelijke problemen met CORS identificeren en oplossen, en het beveiligings- en prestatieniveau van je applicatie verbeteren.
Hoewel CORS (Cross-Origin Resource Sharing) vaak de voorkeursmethode is voor het toestaan van cross-origin communicatie in webontwikkeling, zijn er situaties waarin CORS niet de ideale oplossing is. Gelukkig zijn er andere technieken en methoden beschikbaar die je kunt overwegen in dergelijke gevallen.
Er zijn verschillende redenen waarom CORS mogelijk niet de geschikte keuze is voor jouw specifieke scenario:
Gelukkig zijn er enkele alternatieven en uitbreidingen beschikbaar voor CORS:
JSONP (JSON with Padding) is een techniek die kan worden gebruikt als alternatief voor CORS in situaties waarin CORS niet beschikbaar is of niet kan worden geïmplementeerd. JSONP maakt het mogelijk om JSON-data op te halen vanaf een andere domeinnaam door gebruik te maken van een eenvoudige script-injectie. In plaats van XHR aan te roepen zoals bij CORS, wordt er een script-element gemaakt dat de externe resource ophaalt en deze vervolgens teruggeeft via een callback-functie die door de client wordt gedefinieerd.
Een andere benadering voor cross-origin communicatie is door gebruik te maken van proxies. Een proxy fungeert als een tussenpersoon tussen de client en de externe server en stelt de client in staat om rechtstreeks met de proxy te communiceren, terwijl de proxy op zijn beurt verbinding maakt met de externe server. Hierdoor worden de beperkingen van cross-origin communicatie omzeild.
Dergelijke proxies kunnen worden geïmplementeerd op de server waar je applicatie op draait of door gebruik te maken van externe proxy-services. Dit stelt je in staat om de controle te behouden over de communicatie met externe domeinen en geeft je de mogelijkheid om aangepaste regels en beveiligingsmaatregelen toe te voegen.
Naast proxies zijn er ook andere technieken beschikbaar, zoals Cross-Origin Resource Sharing for Server-Sent Events (SSE), WebSockets en Cross-Origin Embedder Policy (COEP). Deze methoden zijn echter meer gericht op specifieke use-cases en zijn mogelijk niet geschikt voor alle situaties waarin CORS niet ideaal is.
Elke alternatieve benadering heeft zijn eigen kenmerken en overwegingen, dus het is belangrijk om de specifieke vereisten van je applicatie en de beveiligings- en prestatie-implicaties van elke methode zorgvuldig te evalueren voordat je een keuze maakt.
Met een 3D-printer maak je zelf handige spullen. Denk aan een houder voor je telefoon…
Een drukke service is geen moment om te zoeken naar de juiste knop, bonnetjes te…
Iedereen kent het probleem. Je koopt een nieuwe laptop, telefoon of tablet en na een…
Het beheren van toegangsrechten binnen een organisatie is cruciaal om chaos te voorkomen. Stel je…
Wie een doorsnee toestel uit 2026 in de hand neemt, een telefoon, een actiecamera, een…
In dozen op zolders en in kasten liggen ze bij veel mensen nog: oude videobanden…