Nasıl-Control-Allow-Access Kökenli çalışma Başlığı?
Görünüşe göre, tamamen anlambilimi ben yanlış anlamışım. Şöyle bir şey düşündüm:
- Bir istemci javascript kodu mycode.js indir http://siteA -kökeni.
- Mycode.js yanıt Başlığı içerirAccess-Control-Köken İzin ver: http://siteBsanmıştım demek ki MyCode.js cross-origin site için başvurular B . yapmak için izin verildi
- İstemci bazı işlevler sırayla iyi olmalı http://siteb,, çapraz menşe istekleri olmasına rağmen istekleri olan mycode.js, tetikler.
Evet, ben hatalıyım. Bu gibi çalışmaz. Yani, http://en.wikipedia.org/wiki/Cross-origin_resource_sharing okudum ve http://www.w3.org/TR/cors/ okumaya çalıştı.
Bir şey kesin - hala nasıl bu başlığı kullanmak gerekiyor anlamıyorum.
Bir iki site ve site B. tam kontrol edemiyorum Nasıl javascript kodu sitedeki kaynaklara erişmek için Bir site B, bu başlığı kullanarak karşıdan etkinleştirebilirim?
S. S.
JSONP kullanmak istemiyorum.
CEVAP
Access-Control-Allow-Origin
CORS (Cross-Origin Resource Sharing) header.
Site B Site içeriği almaya çalıştığında, Site B Access-Control-Allow-Origin
yanıt bir başlık Bu sayfanın içeriği belirli kökenleri erişebileceği tarayıcı anlatmak için gönderebilirsiniz. (Birkökenlibir*.* 34) Varsayılan olarak, Site B Sayfa not accessible to any other origin; Access-Control-Allow-Origin
Başlığı kullanarak çapraz kökeni, özel talep kökenleri tarafından erişim için bir kapı açar.
Site B Site için erişilebilir hale getirmek isteyen her kaynak/sayfa, Site B yanıt başlığı ile sayfalarına hizmet eder:
Access-Control-Allow-Origin: http://siteA.com
Modern tarayıcılar çapraz etki alanı istekleri düpedüz engellemez. Site Sitesinden bir sayfa B istekleri, tarayıcı aslında istenen sayfayı almak olacaktırAğ Düzeyindeve kontrol edin, eğer yanıt listesi Site başlıklarını Bir izin isteyenin bir etki alanı olarak. Eğer Site B değil gösterilen Bir Site izin verilen erişim Bu sayfa, tarayıcı tetik XMLHttpRequest
error
olay ve inkar yanıt veri isteyen bir JavaScript kodu.
Basit olmayan istekleri
Ağ düzeyde ne olabilirbirazdaha karmaşık. Eğer istek ** 36, tarayıcının ilk veri-daha az gönderir bir "" SEÇENEKLERİ istek, sunucu isteği kabul edeceğini doğrulamak için. ön kontrol ise İsteği olmayan basit olduğunda (veya ikisini birden)
- bir HTTP GET fiilini kullanarak veya SONRASI (örneğin KOYUN) SİLİN
- kullanarak basit olmayan başlıkları isteği; sadece basit istekleri başlıkları:
Accept
Accept-Language
Content-Language
- 14* *(bu değeri
application/x-www-form-urlencoded
,multipart/form-data
text/plain
yalnızca basit)
Eğer sunucu yanıt için ön kontrol SEÇENEKLERİ ile uygun yanıt başlıklar (Access-Control-Allow-Headers
basit olmayan başlıkları Access-Control-Allow-Methods
olmayan basit fiiller) maçı olmayan basit fiil ve/veya basit olmayan başlıkları, tarayıcı gönderir gerçek istek.
application/json
, tarayıcı basit olmayan Content-Type
değeri /somePage
, için bir istek göndermek istiyor bu Site diyelim ki ilk ön kontrol isteği gönderir:
OPTIONS /somePage HTTP/1.1
Origin: http://siteA.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Content-Type
24* and Access-Control-Request-Headers
*tarayıcı tarafından otomatik olarak eklenir; onları eklemek zorunda değilsiniz unutmayın. Bu ön kontrol SEÇENEKLERİ alır başarılı yanıt başlıkları:
Access-Control-Allow-Origin: http://siteA.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type
Gerçek isteği ön kontrol yapıldıktan sonra () gönderirken, davranış, basit bir isteği nasıl işleneceğini aynı şeydir. Diğer bir deyişle, başarılı olan olmayan basit bir istek basit bir istek (örneğin, hala Access-Control-Allow-Origin
tekrar gerçek yanıtı göndermelidir sunucu) olarak kabul edilir.
Tarayıcıları gerçek bir istek gönderir:
PUT /somePage HTTP/1.1
Origin: http://siteA.com
Content-Type: application/json
{ "myRequestContent": "JSON is so great" }
Ve sunucu basit bir istek verir gibi Access-Control-Allow-Origin
,: geri gönderir
Access-Control-Allow-Origin: http://siteA.com
-Basit olmayan istekleri hakkında biraz daha fazla bilgi için Understanding XMLHttpRequest over CORS bkz.
&; 'Access-Control-Allow-Origin&#...
XMLHttpRequest Kökenli null Access-Con...
Nasıl bir Access-Control-Allow-Origin ...
Hayır 'Access-Control-Allow-Origi...
Hata :İçerik-Türü Access-Control-Allow...