2012-12-21 19 views
20

JSON yükü için bir CORS isteği göndermeye çalışıyorum. Hem sunucuyu hem de müşteriyi kontrol ediyorum.Özel bir üstbilgiyi çapraz etki alanında (CORS) XMLHttpRequest'e nasıl gönderirsiniz?

Burada boyunca takip ediyorum: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

sunucu her isteği ile birlikte gönderilmesi gerekir özel bir başlığa sahiptir. Bu özel başlık bu nedenle 'basit değil' talebinde bulunur ve bu nedenle istek bir OPTIONS isteği ile önceden kontrol edilmelidir.

OPTIONS isteğini yapmak için jquery'yi görebiliyorum, ancak özel üstbilgiyi birlikte göndermiyor.

Yöntemleri denedim: ajax ön filtre kullanılarak http://api.jquery.com/jQuery.ajax/

  • :

    , tarayıcı boyunca özel üstbilgi göndermiyor .

    FF 17.0.1 kullanıyorum, jquery 1.8.3.

  • +0

    Kodunuzu başlığını ayarladığınız yere gösterin. – Barmar

    +0

    'headers: {Header-name: value}' seçeneği çalışmıyor mu? – Barmar

    +0

    Sorunun neden olduğu başlığın adı nedir? Barmar'a katılıyorum, tüm JS kodunuzu gösteriyorum ve istek/yanıt bunu hata ayıklamaya yardımcı olabilir. – monsur

    cevap

    30

    Sorununuz jquery ile değil, how CORS works. BeforeSend geri aramanız muhtemelen beklendiği gibi çalışıyordu ... ancak tarayıcılar, ne olursa olsun, ön başlıklı isteklerde özel başlık göndermez. Bu tasarım gereğidir; Ön kontrol isteğinin amacı, CORS teknik özelliklerinde tanımlanan "basit" malzemenin ötesinde, hangi kullanım bilgisinin (tarayıcı) gönderilmesine izin verileceğini belirlemektir. Böylelikle, herhangi bir basit olmayan verinin (özel başlık gibi) ön uçuş talebinin bir parçası olarak gönderilmesi için kendi kendini yenilgidir.

    Kullanım talimatını özel üstbilginizi gerçek CORS isteğine dahil edecek şekilde yönlendirmek için, ön kontrol yanıtınıza bir Access-Control-Allow-Headers header ekleyin. Kullanışlı aktarımların üstbilgileriyle fazla ilgilenmiyorsanız, yanıtta gönderdiğiniz Access-Control-Allow-Headers'un değeri olarak Access-Control-Request-Headers istek başlık alanının değerini tekrar ekleyebildiğinize inanıyorum.

    Ayrıca syntax section of the spec'da tanımlanan diğer Access-Control-Allow-* başlıklarından bazılarını da eklemek isteyebilirsiniz.

    da CORS - How do 'preflight' an httprequest?

    eylem bu başlıkları göstermektedir Ayrıca bkz Mozilla's CORS preflight example, bakınız.

    +1

    Teşekkürler. Ön kontrol yanıtı gerçekleştikten sonra çalışan şeylerim var, sadece OPTIONS sorunu bu. Sunucu tabanlı bir geçici çözüm kullanmam gerekecek gibi görünüyor. – mooreds

    +0

    @mooreds - Ön kontrol isteğinde gönderilen/alınan başlıkların anlık görüntüsünü sağlayabilir misiniz? Sunucunuzun, özel üstbilgiye sahip olmadığından OPTIONS isteğini reddetmesi sorunu mu? 'Tahmin edersem, neden önkoşul yanıtından sonra şeyler çalışıyorsa, neden sunucu çözümüne ihtiyacınız var anlamıyorum. – broofa

    +0

    evet, OPTIONS isteği reddedildi çünkü özel üstbilgiye sahip değil.Kromda, verilerin geri kalanı hala gönderildi (yerel forumda geliştirdiğim için olabilir, emin değilim), ancak Firefox için, OPTIONS isteği başarısız olduğunda, isteğin geri kalanı başarısız olur. – mooreds

    İlgili konular