Partajarea resurselor între origini

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 12 noiembrie 2020; verificarea necesită 21 de modificări .

Partajarea resurselor încrucișate ( CORS ; din  engleză  -  „sharing resources between different sources”) este o tehnologie a browserelor modernecare vă permite să oferiți paginilor web acces la resursele unui alt domeniu .

Esența tehnologiei CORS

Există trei domenii care vă permit să descărcați resurse de pe serverul U. Pentru ca acest lucru să devină posibil, serverul web U, care oferă conținutul , trebuie doar să specifice o listă de domenii de încredere în Access-Control-Allow-Origin. antet răspuns : A, B, C. Atunci pentru paginile acestor domenii nu se vor aplica restricțiile principiului aceleiași origini pe paginile solicitate:

Access-Control-Allow-Origin: A, B, C

După aceea, paginile domeniilor A, B, C vor putea descărca conținut de pe serverul U.

Pentru PHP , acest lucru se face apelând funcția header():

Antet <?php ( "Access-Control-Allow-Origin: http://example.com" ); ?>

Exemplu de utilizare

Pentru a inițializa o solicitare cu origini încrucișate , browserul client adaugă o indicație de Origine ( domeniul site-ului din care provine cererea) la cererea HTTP . De exemplu, pagina http://www.a.com/page.html încearcă să obțină date de la pagina http://www.b.com/cors.txt. Dacă browserul client acceptă tehnologia CORS, cererea va arăta astfel:

GET /cors.txt HTTP/1.1 Gazdă: www.b.com Origine: www.a.com

Dacă serverul www.b.com permite primirea de date de la www.a.com, atunci răspunsul serverului va conține linia:

Acces-Control-Allow-Origin: http://www.a.com

Dacă această linie lipsește în răspunsul serverului , atunci un browser care acceptă tehnologia CORS va returna un cod de eroare în loc de date.

În cazul în care serverul dorește să permită accesul paginilor din orice domeniu , poate specifica în răspuns:

Acces-Control-Permite-Origine: *

Dacă serverul dorește să permită accesul la mai mult de un domeniu , atunci răspunsul serverului trebuie să conțină o linie Access-Control-Allow-Origin pentru fiecare domeniu .

Acces-Control-Allow-Origin: http://www.a.com Acces-Control-Allow-Origin: http://www.b.com Acces-Control-Allow-Origin: http://www.c.com

În practică, se utilizează mai des o înregistrare din mai multe domenii , separate printr-un spațiu [1] :

Acces-Control-Allow-Origin: http://www.a.com http://www.b.com http://www.c.com

Relația dintre CORS și JSONP

Tehnologia CORS poate fi folosită ca o alternativă mai modernă și mai fiabilă la JSONP , deoarece vă permite să profitați din plin de XMLHttpRequest și, spre deosebire de JSONP, nu este vulnerabilă la injecția SQL . Pe de altă parte, tehnologia CORS necesită suport special în codul browserului , în timp ce JSONP nu depinde de acest lucru.

Suport browser

  • Gecko 1.9.1 ( Firefox 3.5 [2] , SeaMonkey 2.0) și o versiune ulterioară.
  • WebKit ( Safari 4 și versiuni ulterioare [3] , Google Chrome 3 și versiuni ulterioare [4] , eventual mai devreme).
  • MSHTML/Trident 6.0 ( Internet Explorer 10 ) are suport încorporat [5] , MSHTML/Trident 4.0 și 5.0 ( Internet Explorer 8 și 9) oferă suport parțial prin obiectul XDomainRequest. Browserele Internet Explorer 10 și 11, conform rapoartelor de erori disponibile [6] , nu acceptă CORS pentru numele de domenii internaționalizate ( IDN ) care conțin caractere non-latine.
  • Browsere Presto (Opera) CORS este implementat în Opera 12.00 [7] și Opera Mobile 12, dar nu și în Opera Mini.

Note

  1. Partajarea resurselor între origini . Consultat la 22 noiembrie 2013. Arhivat din original la 6 martie 2017.
  2. Control acces HTTP (CORS) - HTTP | MDN . Data accesului: 24 februarie 2014. Arhivat din original pe 21 februarie 2014.
  3. xmlhttprequest între site-uri cu CORS ✩ Mozilla Hacks - blogul pentru dezvoltatori web . Preluat la 24 februarie 2014. Arhivat din original la 11 septembrie 2019.
  4. Copie arhivată (link nu este disponibil) . Data accesului: 24 februarie 2014. Arhivat din original la 19 iulie 2012. 
  5. Tony Ross, Manager de programe, Internet Explorer. CORS pentru XHR în IE10 . MSDN (9 februarie 2012). Preluat la 2 decembrie 2015. Arhivat din original la 5 decembrie 2015.
  6. Browserul nu recunoaște Access-Control-Allow-Origin dacă este un domeniu IDN - Microsoft Edge Development (downlink) . developer.microsoft.com. Preluat la 18 septembrie 2016. Arhivat din original la 19 septembrie 2016. 
  7. Opera: Opera 12.00 pentru Jurnalul de modificări UNIX (link descendent) . Consultat la 24 februarie 2014. Arhivat din original la 18 iunie 2012. 

Literatură

  • Monsur Hossain. CORS în acțiune: crearea și consumul de API-uri cu origini încrucișate. - Manning Publications Company, 2014. - 240 p. - ISBN 978-1-61729-182-1 .
  • Mike Shema. Hacking aplicații web: detectarea și prevenirea problemelor de securitate a aplicațiilor web. - Newnes, 2012. - P. 3-6. — ISBN 978-1-59749-951-4 .