Ajax menggunakan https pada halaman http


101

Situs saya menggunakan protokol http dan https; itu tidak mempengaruhi konten. Situs saya menggunakan panggilan ajax jQuery, yang juga mengisi beberapa area di halaman.

Sekarang, saya ingin melakukan semua panggilan ajax melalui https. (tolong jangan tanya saya kenapa :)) Ketika saya berada di halaman dengan protokol https, permintaan ajax bekerja. Saat saya berada di halaman dengan protokol http, saya mendapatkan kesalahan javascript: Akses ke URI terbatas ditolak

Saya tahu bahwa ini adalah masalah lintas domain (sebenarnya, ini masalah lintas protokol), dan saya tahu bahwa saya harus menggunakan protokol yang sama dalam panggilan ajax seperti di halaman saat ini.

Namun, saya ingin semua panggilan ajax menjadi https, dan memanggilnya di halaman yang disajikan melalui http. Apakah ada solusi untuk mencapai ini (beberapa solusi json / proxy?), Atau tidak mungkin?


4
Mengapa tidak mencocokkan ajax dengan protokol halaman pemuatan?
scheibk

45
Mereka secara khusus mengatakan "Tolong jangan tanya saya mengapa."
Chris Moschini

Mengapa Anda membutuhkan AJAX dengan HTTPS .....
Miles

4
Misalnya untuk formulir pembayaran yang lebih dinamis yang terhubung ke gateway pembayaran seperti paypal di latar belakang sehingga orang-orang dapat melihat apa yang terjadi .. Hanya satu kemungkinan lagi
kentor

Jawaban:


58

Tambahkan header Access-Control-Allow-Origin dari server

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

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


7
Besar respon - tetapi tidak didukung oleh beberapa browser yang digunakan seperti Opera (tidak sama sekali) dan Internet Explorer (didukung sejak versi 8) caniuse.com/#search=cors
SimonSimCity

1
Sepertinya Opera mendukungnya sekarang: en.wikipedia.org/wiki/… Tapi bukan Opera Mini saja ...
gitaarik

11

Coba JSONP.

sebagian besar perpustakaan JS membuatnya semudah panggilan AJAX lainnya, tetapi secara internal menggunakan iframe untuk melakukan kueri.

jika Anda tidak menggunakan JSON untuk payload Anda, maka Anda harus memutar mekanisme Anda sendiri di sekitar iframe.

Secara pribadi, saya baru saja mengalihkan dari halaman http: // ke https: // satu


1
hmm saya sudah mencoba jquery .ajax dengan jsonp: set opsi 'jsonp_callback', tetapi kesalahan js masih sama.
pengguna135863

mungkin Anda harus menambahkan parameter callback di URL
Javier

@ user135863 Apakah titik akhir yang Anda kirimkan kueri untuk mendukung JSONP sejak awal?
Leigh Brenecki

1
Demi kewarasan saya, saya akan menggunakan opsi terakhir Anda ... Pengalihan sederhana kehttps:
Dzeimsas Zvirblis

9

http://example.com/ dapat menyelesaikan ke VirtualHost yang berbeda dari https://example.com/ (yang, karena header Host tidak dikirim, merespons default untuk IP tersebut), sehingga keduanya diperlakukan sebagai terpisah domain dan karenanya tunduk pada pembatasan JS lintasdomain.

Callback JSON memungkinkan Anda menghindari ini.


tautan mati pada panggilan balik JSON :(
Kubie

@Kubie Jawaban ini besok sepuluh tahun, dan tautan rusak adalah alasan kami mengajukan pertanyaan yang menyertakan informasi yang cukup untuk bertahan hidup.
ceejayoz

hanya memperhatikan 10 tahun ha ... dan ya poin yang bagus. Tidak apa-apa, akankah Google berkeliling untuk yang satu ini & edit jawaban jika saya menemukan sesuatu
Kubie

4

Lihat proyek Forge opensource. Ini menyediakan implementasi TLS JavaScript, bersama dengan beberapa Flash untuk menangani permintaan lintas domain yang sebenarnya:

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

Singkatnya, Forge akan memungkinkan Anda membuat XmlHttpRequests dari halaman web yang dimuat melalui http ke situs https. Anda perlu memberikan file kebijakan lintas domain Flash melalui server Anda untuk mengaktifkan permintaan lintas domain. Lihat posting blog di akhir README untuk mendapatkan penjelasan yang lebih mendalam tentang cara kerjanya.

Namun, saya harus menyebutkan bahwa Forge lebih cocok untuk permintaan antara dua domain https yang berbeda. Pasalnya, ada potensi serangan MiTM. Jika Anda memuat JavaScript dan Flash dari situs yang tidak aman, ini dapat disusupi. Penggunaan yang paling aman adalah memuatnya dari situs yang aman dan kemudian menggunakannya untuk mengakses situs lain (aman atau tidak).


2

Anda dapat mencoba memuat halaman https dalam iframe dan merutekan semua permintaan ajax masuk / keluar dari bingkai melalui beberapa jembatan, ini adalah peretasan tetapi mungkin berhasil (tidak yakin apakah itu akan memberlakukan pembatasan akses yang sama mengingat konteks aman) . Jika tidak, proxy http lokal untuk merutekan ulang permintaan (seperti panggilan lintas domain) akan menjadi solusi yang diterima.


2
Setelah membaca utas ini, saya akan tetap menggunakan JSONP dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page
JGFMK

Ini dapat dilakukan, tetapi pastikan untuk menyetel tajuk P3P jika Anda memerlukan cookie sesi dari iFrame ... jika tidak, MSE akan mengatakan "nu uh uh"
srquinn

2

Inilah yang saya lakukan:

Buat iFrame tersembunyi dengan data yang ingin Anda posting. Karena Anda masih mengontrol iFrame tersebut, asal yang sama tidak berlaku. Kemudian kirimkan formulir di iFrame itu ke halaman ssl. Halaman ssl kemudian dialihkan ke halaman non-ssl dengan pesan status. Anda memiliki akses ke iFrame.


Ini dapat dilakukan, tetapi pastikan untuk menyetel header P3P jika Anda memerlukan cookie sesi dari iFrame ... jika tidak, MSE akan mengatakan "nu uh uh"
srquinn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.