Kaynaklar Arası Kaynak Paylaşımı - CORS
(AKA Etki Alanları Arası AJAX isteği), çoğu Web geliştiricisinin Aynı Kaynaklı Politika'ya göre karşılaşabileceği bir sorundur, tarayıcılar güvenlik sanal alanındaki istemci JavaScript'i kısıtlar, genellikle JS uzak bir sunucuyla doğrudan iletişim kuramaz farklı bir alandan. Geçmişte geliştiriciler, Etki Alanları Arası kaynak isteğini gerçekleştirmek için birçok zor yol oluşturdular, en yaygın kullanılan yöntemler şunlardır:
- Uzaktan kumanda ile iletişim kurmak için "proxy" olarak Flash / Silverlight veya sunucu tarafını kullanın.
- Dolgu ile JSON ( JSONP ).
- Uzak sunucuyu iframe'e gömer ve fragment veya window.name ile iletişim kurar, buraya bakın .
Bu zor yolların az ya da çok bazı sorunları vardır, örneğin JSONP, geliştiriciler basitçe "değerlendirirse" ve yukarıdaki # 3, güvenlik deliği ile sonuçlanabilir, ancak her iki etki alanı da birbirleri arasında sıkı bir sözleşme yapmalıdır, ne esnek ne de zarif BENİM NACİZANE FİKRİME GÖRE:)
W3C, bu sorunu çözmek için güvenli, esnek ve önerilen standart bir yol sağlamak için Standartlar Arası Kaynak Paylaşımı'nı (CORS) tanıttı.
Mekanizma
Yüksek seviyeden, CORS'nin A alanından istemci AJAX çağrısı ile B alan adında barındırılan bir sayfa arasında bir sözleşme olduğunu düşünebiliriz, tipik bir Çapraz Kaynak isteği / yanıtı şöyle olur:
DomainA AJAX istek üstbilgileri
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
DomainB yanıt başlıkları
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
Yukarıda işaretlediğim mavi bölümler çekirdek gerçeklerdi, "Kökeni" istek üstbilgisi ", kökenler arası istek veya ön kontrol isteğinin nereden geldiğini belirtir," Erişim-Kontrol-İzin Ver-Kökeni "yanıt başlığı, bu sayfanın DomainA (değer * ise, herhangi bir etki alanından uzak isteklere izin verir).
Yukarıda bahsettiğim gibi W3, tarayıcıya aslında Cross-Origin HTTP isteğini göndermeden önce bir " ön kontrol isteği " uygulamasını önerdi , kısaca bir HTTP OPTIONS
isteğidir:
OPTIONS DomainB.com/foo.aspx HTTP/1.1
Foo.aspx, OPTIONS HTTP fiilini destekliyorsa, aşağıdaki gibi bir yanıt verebilir:
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
Yalnızca yanıt "Erişim-Denetim-İzin Verme Kökeni" içeriyorsa ve değeri "*" ise veya CORS isteğini gönderen etki alanını içeriyorsa, bu zorunlu koşul tarayıcısını karşılayarak gerçek Etki Alanları Arası isteği gönderir ve sonucu önbelleğe alır " Ön Kontrol-Sonuç-Önbellek ".
Üç yıl önce CORS hakkında blog yazdım: AJAX Cross-Origin HTTP isteği
http://siteA/MyCode.js
.