Delen via


Azure CDN gebruiken met CORS

Wat is CORS?

CORS (cross-origin resource sharing) is een HTTP-functie waarmee een webtoepassing die onder het ene domein wordt uitgevoerd, toegang heeft tot resources in een ander domein. Om de mogelijkheid van aanvallen op meerdere sites te verminderen, implementeren alle moderne webbrowsers een beveiligingsbeperking die bekend staat als beleid voor dezelfde oorsprong. Deze beperking voorkomt dat een webpagina API's in een ander domein aanroept. CORS biedt een veilige manier om één origin (het oorspronkelijke domein) TOE te staan API's aan te roepen in een andere origin.

Hoe het werkt

Er zijn twee typen CORS-aanvragen, eenvoudige aanvragen en complexe aanvragen.

Voor eenvoudige aanvragen:

  1. De browser verzendt de CORS-aanvraag met een extra HTTP-aanvraagheader van origin . De waarde van de aanvraagheader is de oorsprong die de bovenliggende pagina heeft geleverd, die is gedefinieerd als de combinatie van protocol, domein en poort. Wanneer een pagina van pogingen om toegang te krijgen tot de gegevens van HTTPS://www.contoso.com een gebruiker in de fabrikam.com origin, wordt de volgende aanvraagheader verzonden naar fabrikam.com:

    Origin: https://www.contoso.com

  2. De server kan reageren met een van de volgende headers:

    • Een Access-Control-Allow-Origin-header in het antwoord die aangeeft welke oorspronkelijke site is toegestaan. Voorbeeld:

      Access-Control-Allow-Origin: https://www.contoso.com

    • Een HTTP-foutcode zoals 403 als de server de cross-origin-aanvraag niet toestaat na het controleren van de Origin-header

    • Een Access-Control-Allow-Origin-header met een jokerteken waarmee alle oorsprongen zijn toegestaan:

      Access-Control-Allow-Origin: *

Voor complexe aanvragen:

Een complexe aanvraag is een CORS-aanvraag waarbij de browser een voorbereidende aanvraag (een voorlopige test) moet verzenden voordat de daadwerkelijke CORS-aanvraag wordt verzonden. De voorbereidende aanvraag vraagt de servermachtiging als de oorspronkelijke CORS-aanvraag kan doorgaan en een OPTIONS aanvraag naar dezelfde URL is.

Tip

Zie de handleiding voor CORS voor REST API's voor meer informatie over CORS-stromen en veelvoorkomende valkuilen.

Jokertekens of scenario's met één oorsprong

CORS op Azure CDN werkt automatisch zonder extra configuraties wanneer de header Access-Control-Allow-Origin is ingesteld op jokerteken (*) of één oorsprong. CDN cache het eerste antwoord en volgende aanvragen gebruiken dezelfde header.

Als er al aanvragen zijn ingediend bij het CDN voordat CORS is ingesteld op uw oorsprong, moet u inhoud op uw eindpuntinhoud leegmaken om de inhoud opnieuw te laden met de header Access-Control-Allow-Origin .

Scenario's met meerdere oorsprongen

Als u wilt toestaan dat een specifieke lijst met oorsprongen wordt toegestaan voor CORS, wordt het iets ingewikkelder. Het probleem treedt op wanneer het CDN de header Access-Control-Allow-Origin voor de eerste CORS-origin in de cache opgeslagen. Wanneer een andere CORS-origin een volgende aanvraag doet, dient het CDN de header Access-Control-Allow-Origin in de cache, die niet overeenkomt. Er zijn verschillende manieren om dit probleem op te lossen.

Standaardprofielen voor Azure CDN

In Azure CDN Standard van Microsoft kunt u een regel maken in de Standard-regelengine om de Origin-header van de aanvraag te controleren. Als het een geldige oorsprong is, stelt uw regel de header Access-Control-Allow-Origin in met de gewenste waarde. In dit geval wordt de header Access-Control-Allow-Origin van de oorspronkelijke server van het bestand genegeerd en beheert de cdn-regelengine de toegestane CORS-oorsprongen volledig.

Voorbeeld van regels met standaardregelengine

Tip

U kunt extra acties toevoegen aan uw regel om extra antwoordheaders te wijzigen, zoals Access-Control-Allow-Methods.

Azure CDN Premium van Edgio

Met behulp van de Edgio Premium-regelengine moet u een regel maken om de Origin-header van de aanvraag te controleren. Als het een geldige oorsprong is, stelt uw regel de header Access-Control-Allow-Origin in met de oorsprong die is opgegeven in de aanvraag. Als de oorsprong die is opgegeven in de Origin-header niet is toegestaan, moet de regel de header Access-Control-Allow-Origin weglaten, waardoor de browser de aanvraag weigert.

Er zijn twee manieren om dit probleem op te lossen met de Premium-regelengine. In beide gevallen wordt de header Access-Control-Allow-Origin van de oorspronkelijke server van het bestand genegeerd en beheert de cdn-regelengine de toegestane CORS-origins volledig.

Eén reguliere expressie met alle geldige oorsprongen

In dit geval maakt u een reguliere expressie die alle oorsprongen bevat die u wilt toestaan:

https?:\/\/(www\.contoso\.com|contoso\.com|www\.microsoft\.com|microsoft.com\.com)$

Tip

Azure CDN Premium van Edgio maakt gebruik van Perl Compatible Regular Expressions als engine voor reguliere expressies. U kunt een hulpprogramma zoals Reguliere expressies 101 gebruiken om uw reguliere expressie te valideren. Houd er rekening mee dat het teken '/' geldig is in reguliere expressies en niet hoeft te worden ontsnapt, maar dat teken wordt beschouwd als een aanbevolen procedure en wordt verwacht door sommige regex validators.

Als de reguliere expressie overeenkomt, vervangt uw regel de header Access-Control-Allow-Origin (indien van toepassing) van de oorsprong door de oorsprong die de aanvraag heeft verzonden. U kunt ook extra CORS-headers toevoegen, zoals Access-Control-Allow-Methods.

Voorbeeld van regels met reguliere expressie

Aanvraagheaderregel voor elke oorsprong.

In plaats van reguliere expressies kunt u in plaats daarvan een afzonderlijke regel maken voor elke oorsprong die u wilt toestaan met behulp van de voorwaarde Wildcard-overeenkomst voor aanvraagheader. Net als bij de reguliere expressiemethode stelt de regelengine alleen de CORS-headers in.

Voorbeeld van regels zonder reguliere expressie

Tip

In het voorbeeld geeft het gebruik van het jokerteken * aan dat de regelengine overeenkomt met zowel HTTP als HTTPS.