Udostępnianie zasobów między różnymi źródłami - CORS
(żądanie AJAX między domenami AKA) to problem, z którym większość programistów internetowych może się spotkać, zgodnie z zasadami tego samego pochodzenia, przeglądarki ograniczają JavaScript klienta w bezpiecznym obszarze izolowanym, zwykle JS nie może bezpośrednio komunikować się ze zdalnym serwerem z innej domeny. W przeszłości programiści tworzyli wiele trudnych sposobów realizacji żądania zasobów między domenami, najczęściej za pomocą następujących sposobów:
- Użyj Flash / Silverlight lub strony serwera jako „proxy” do komunikacji ze zdalnym.
- JSON With Padding ( JSONP ).
- Osadza zdalny serwer w ramce iframe i komunikuje się przez fragment lub window.name, patrz tutaj .
Te trudne sposoby mają mniej lub bardziej pewne problemy, na przykład JSONP może spowodować lukę w zabezpieczeniach, jeśli programiści po prostu go „ewaluują”, a powyżej 3, chociaż działa, obie domeny powinny zbudować między sobą ścisłą umowę, nie jest ani elastyczny, ani elegancki MOIM ZDANIEM:)
Firma W3C wprowadziła wspólne udostępnianie zasobów (CORS) jako standardowe rozwiązanie zapewniające bezpieczny, elastyczny i zalecany standardowy sposób rozwiązania tego problemu.
Mechanizm
Z wysokiego poziomu możemy po prostu uznać, że CORS jest umową między wywołaniem klienta AJAX z domeny A a stroną hostowaną w domenie B, typowe żądanie / odpowiedź między źródłami to:
Domeny AJAX nagłówki żądań
Host DomainB.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language en-us;
Accept-Encoding gzip, deflate
Keep-Alive 115
Origin http://DomainA.com
Nagłówki odpowiedzi DomainB
Cache-Control private
Content-Type application/json; charset=utf-8
Access-Control-Allow-Origin DomainA.com
Content-Length 87
Proxy-Connection Keep-Alive
Connection Keep-Alive
Niebieskie części, które zaznaczyłem powyżej, to fakty kernalne: „Nagłówek żądania pochodzenia” wskazuje, skąd pochodzi żądanie krzyżowania pochodzenia lub żądania kontroli wstępnej ”, nagłówek odpowiedzi„ Kontrola dostępu - zezwól na pochodzenie ”wskazuje, że ta strona zezwala na zdalne żądanie z Domena A (jeśli wartość * wskazuje, zezwala na zdalne żądania z dowolnej domeny).
Jak wspomniałem powyżej, W3 zaleca przeglądarce, aby wdrożyła „ żądanie inspekcji wstępnej ” przed przesłaniem faktycznie żądania HTTP Cross-Origin, w skrócie jest to OPTIONS
żądanie HTTP :
OPTIONS DomainB.com/foo.aspx HTTP/1.1
Jeśli foo.aspx obsługuje OPCJE czasownik HTTP, może zwrócić odpowiedź jak poniżej:
HTTP/1.1 200 OK
Date: Wed, 01 Mar 2011 15:38:19 GMT
Access-Control-Allow-Origin: http://DomainA.com
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Max-Age: 1728000
Connection: Keep-Alive
Content-Type: application/json
Tylko jeśli odpowiedź zawiera „Kontrola dostępu - Zezwalaj na pochodzenie” ORAZ jej wartość to „*” lub zawiera domenę, która przesłała żądanie CORS, spełniając ten warunek mandatu, przeglądarka prześle rzeczywiste żądanie między domenami i buforuje wynik w „ Pamięć podręczna wyników inspekcji wstępnej ”.
Napisałem o CORS trzy lata temu: żądanie HTTP AJAX Cross-Origin
http://siteA/MyCode.js
.