Bir http sayfasında https kullanan Ajax


101

Sitem http ve https protokolü kullanıyor; içeriği etkilemez. Sitem, sayfadaki bazı alanları da dolduran jQuery ajax çağrılarını kullanıyor.

Şimdi, tüm ajax çağrılarını https üzerinden yapmak istiyorum. (lütfen neden diye sormayın :)) https protokolü olan bir sayfadayken ajax istekleri çalışıyor. Http protokolü içeren bir sayfadayken, bir javascript hatası alıyorum: Kısıtlanmış URI'ye erişim reddedildi

Bunun bir çapraz etki alanı problemi olduğunu biliyorum (aslında bu bir çapraz protokol problemi) ve ajax çağrılarında da mevcut sayfadakiyle aynı protokolü kullanmam gerektiğini biliyorum.

Yine de, tüm ajax çağrılarının https olmasını ve http üzerinden sunulan bir sayfada çağrı yapmasını istiyorum. Bunu başarmak için herhangi bir geçici çözüm var mı (bazı json / proxy çözümü?), Yoksa bu imkansız mı?


4
Ajax'ı neden yükleme sayfası protokolüyle eşleştirmiyorsunuz?
scheibk

45
Özellikle "Lütfen nedenini sorma" dediler.
Chris Moschini

Neden
Miles

4
Örneğin, arka planda paypal gibi bir ödeme ağ geçidine bağlanan daha dinamik bir ödeme formu, böylece insanlar neler olduğunu görebilir. Diğer olasılıklardan sadece biri
kentor

Yanıtlar:


58

Access-Control-Allow-Origin başlığını sunucudan ekleyin

Access-Control-Allow-Origin: https://www.mysite.com

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing


7
Harika yanıt - ancak Opera (hiç değil) ve Internet Explorer (sürüm 8'den beri destekleniyor) gibi bazı kullanılmış tarayıcılar tarafından desteklenmiyor caniuse.com/#search=cors
SimonSimCity

1
Görünüşe göre Opera şimdi destekliyor: en.wikipedia.org/wiki/… Ancak Opera Mini değil ...
gitaarik

11

JSONP'yi deneyin.

Çoğu JS kitaplığı, bunu diğer AJAX çağrıları kadar kolaylaştırır, ancak sorguyu yapmak için dahili olarak bir iframe kullanır.

Yükünüz için JSON kullanmıyorsanız, kendi mekanizmanızı iframe çevresinde döndürmeniz gerekir.

şahsen, http: // sayfasından https: // birine yönlendirirdim


1
hmm jquery .ajax'ı jsonp: 'jsonp_callback' seçenek seti ile denedim, ancak yine de aynı js hatası.
user135863

belki URL'ye geri arama parametresini eklemeniz gerekir
Javier

@ user135863 İlk etapta JSONP'yi desteklemek için sorguyu gönderdiğiniz uç nokta mı ?
Leigh Brenecki

1
Akıl sağlığım uğruna son seçeneğinizle gideceğim ... Kolay yönlendirmehttps:
Dzeimsas Zvirblis

9

http://example.com/ , https://example.com/'den farklı bir VirtualHost'a çözümlenebilir (Host başlığı gönderilmediğinden, bu IP için varsayılana yanıt verir), bu nedenle ikisi ayrı olarak değerlendirilir etki alanları ve dolayısıyla etki alanları arası JS kısıtlamalarına tabidir.

JSON geri aramaları bundan kaçınmanıza izin verebilir.


JSON geri aramalarında ölü bağlantı :(
Kubie

@Kubie Bu cevap yarın on yaşında ve kırık bağlantılar, soruların birinden kurtulmak için yeterli bilgiyi içermesinin nedenidir.
ceejayoz

sadece 10 yıllık ha ... ve evet iyi noktayı fark ettim.
Sorun değil

4

Açık kaynaklı Forge projesine göz atın. Etki alanları arası gerçek istekleri işlemek için bir miktar Flash ile birlikte bir JavaScript TLS uygulaması sağlar:

http://github.com/digitalbazaar/forge/blob/master/README

Kısaca Forge, http üzerinden bir https sitesine yüklenmiş bir web sayfasından XmlHttpRequest'ler yapmanızı sağlayacaktır. Etki alanları arası istekleri etkinleştirmek için sunucunuz aracılığıyla bir Flash etki alanları arası ilke dosyası sağlamanız gerekecektir. Nasıl çalıştığına dair daha ayrıntılı bir açıklama almak için BENİOKU'nun sonundaki blog gönderilerine göz atın.

Bununla birlikte, Forge'un iki farklı https alanı arasındaki istekler için daha uygun olduğunu belirtmeliyim. Bunun nedeni, potansiyel bir MiTM saldırısı olmasıdır. JavaScript ve Flash'ı güvenli olmayan bir siteden yüklerseniz güvenliği ihlal edilebilir. En güvenli kullanım, onu güvenli bir siteden yüklemek ve daha sonra diğer sitelere erişmek için kullanmaktır (güvenli veya başka türlü).


2

Https sayfasını bir iframe içinde yüklemeyi deneyebilir ve tüm ajax isteklerini çerçevenin içine / dışına bir köprü aracılığıyla yönlendirebilirsiniz, bu bir hackarounddur ancak işe yarayabilir (güvenli bağlamda aynı erişim kısıtlamalarını uygulayıp uygulamayacağından emin değilsiniz) . Aksi takdirde, istekleri yeniden yönlendirmek için yerel bir http proxy'si (etki alanları arası aramalar gibi) kabul edilen çözüm olacaktır.



Bu yapılabilir, ancak
iFrame'den

2

İşte yaptığım şey:

Göndermek istediğiniz verilerle gizli bir iFrame oluşturun. Hala iFrame'i kontrol ettiğiniz için, aynı başlangıç ​​noktası geçerli değildir. Ardından bu iFrame'deki formu ssl sayfasına gönderin. Daha sonra ssl sayfası, durum mesajlarıyla birlikte ssl olmayan bir sayfaya yönlendirir. İFrame'e erişiminiz var.


Bu yapılabilir, ancak
iFrame'den
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.