Zoeken…


Opmerkingen

Het delen van bronnen tussen verschillende bronnen is ontworpen om dynamische aanvragen tussen domeinen mogelijk te maken, vaak met behulp van technieken zoals AJAX . Hoewel de scripts het meeste werk doen, moet de HTTP-server het verzoek ondersteunen met behulp van de juiste headers.

Klant: een CORS-aanvraag (Cross-Origin Resource Sharing) verzenden

Een verzoek cross-oorsprong moeten worden gestuurd met inbegrip van de Origin -header. Dit geeft aan waar het verzoek vandaan komt. Een verzoek van oorsprong van http://example.com naar http://example.org ziet er bijvoorbeeld als volgt uit:

GET /cors HTTP/1.1
Host: example.org
Origin: example.com

De server gebruikt deze waarde om te bepalen of het verzoek is geautoriseerd.

Server: reageren op een CORS-verzoek

Het antwoord op een CORS-verzoek moet een header voor Access-Control-Allow-Origin , die bepaalt welke oorsprong de CORS-bron mag gebruiken. Deze kop kan een van drie waarden aannemen:

  • Een oorsprong. Als u dit doet, zijn alleen aanvragen van die oorsprong toegestaan .
  • Het karakter * . Dit staat verzoeken van elke oorsprong toe .
  • De tekenreeks is null . Dit staat geen CORS-aanvragen toe .

Bij ontvangst van een CORS-verzoek van de oorsprong http://example.com , als example.com een geautoriseerde oorsprong is, stuurt de server dit antwoord terug:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.com

Een antwoord van elke oorsprong zou dit verzoek ook toestaan, namelijk:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *

Gebruikersreferenties of sessie toestaan

Door toe te staan dat gebruikersreferenties of de gebruikerssessie worden verzonden met een CORS-verzoek, kan de server gebruikersgegevens bewaren voor CORS-aanvragen. Dit is handig als de server moet controleren of de gebruiker is aangemeld voordat gegevens worden verstrekt (bijvoorbeeld alleen een actie uitvoeren als een gebruiker is aangemeld - hiervoor moet het CORS-verzoek met referenties worden verzonden).

Dit kan worden bereikt op de server voor preflight-aanvragen, door de header Access-Control-Allow-Credentials verzenden in reactie op het preflight-verzoek OPTIONS . Neem het volgende geval van een CORS-verzoek om een bron te DELETE :

OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: DELETE
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Credentials: true

De regel Access-Control-Allow-Credentials: true geeft aan dat het volgende DELETE CORS-verzoek kan worden verzonden met gebruikersreferenties.

Preflight-aanvragen

Een standaard CORS-verzoek mag een van slechts twee methoden gebruiken:

  • KRIJGEN
  • POST

en slechts een paar geselecteerde headers. POST CORS-aanvragen kunnen bovendien kiezen uit slechts drie inhoudstypen.

Om dit probleem te voorkomen, moeten aanvragen die andere methoden, kopteksten of inhoudstypen willen gebruiken, eerst een preflight- aanvraag indienen. Dit is een OPTIONS aanvraag met toegangsbeheeraanvraagkopteksten. Dit is bijvoorbeeld een preflight-aanvraag die controleert of de server een PUT aanvraag met een DNT header accepteert:

OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT

Server: reageren op preflight-aanvragen

Wanneer een server een preflight-aanvraag ontvangt, moet deze controleren of deze de gevraagde methode en headers ondersteunt en een antwoord terugsturen dat aangeeft in staat te zijn de aanvraag te ondersteunen, evenals andere toegestane gegevens (zoals referenties).

Deze worden aangegeven in toegangscontrole Headers toestaan. De server kan ook een Max-Age header voor toegangscontrole terugsturen, die aangeeft hoelang de preflight-respons kan worden gecached.

Dit is hoe een aanvraag-antwoordcyclus voor een preflight-aanvraag eruit zou kunnen zien:

OPTIONS /cors HHTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: DNT


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow