Apa yang terjadi jika browser menerima respons pengalihan ke permintaan ajax?
Jika server mengirim pengalihan (alias respons 302 plus Lokasi: header) pengalihan tersebut secara otomatis diikuti oleh peramban. Respons terhadap permintaan kedua (dengan asumsi itu juga bukan pengalihan lain) adalah apa yang terpapar ke program Anda.
Bahkan, Anda tidak memiliki kemampuan untuk mendeteksi apakah respons 302 telah terjadi. Jika 302 redirect mengarah ke 200, maka program Anda bertindak secara identik seolah-olah permintaan asli mengarah langsung ke 200.
Menariknya, saya sampai pada ini karena saya mengalami situasi di mana pengalihan tampaknya tidak diikuti ... ini terjadi ketika pengalihan melanggar kebijakan asal yang sama.
Gus
4
@ Tuhan yang mungkin logis
Dmitry
1
Dalam kasus pengalihan ke 401 (atau kesalahan 4xx atau 5xx) saya berasumsi program Anda akan berperilaku seolah-olah permintaan mengarah langsung ke 401. Apakah itu bukan yang Anda lihat?
Jawaban:
Apa yang terjadi jika browser menerima respons pengalihan ke permintaan ajax?
Jika server mengirim pengalihan (alias respons 302 plus Lokasi: header) pengalihan tersebut secara otomatis diikuti oleh peramban. Respons terhadap permintaan kedua (dengan asumsi itu juga bukan pengalihan lain) adalah apa yang terpapar ke program Anda.
Bahkan, Anda tidak memiliki kemampuan untuk mendeteksi apakah respons 302 telah terjadi. Jika 302 redirect mengarah ke 200, maka program Anda bertindak secara identik seolah-olah permintaan asli mengarah langsung ke 200.
Ini adalah pengalaman saya dan perilaku yang disebutkan dalam spesifikasi .
Pembaruan 2016: Waktu telah berlalu, dan kabar baiknya adalah API fetch baru () khusus akan menawarkan kontrol yang lebih baik tentang bagaimana pengalihan ditangani , dengan perilaku default mirip dengan XHR. Yang mengatakan, itu hanya bekerja di mana fetch () diimplementasikan secara asli . Versi pengambilan polyfill () —yang didasarkan pada XHR — terus memiliki batasan XHR . Untungnya, dukungan peramban asli tampaknya berhasil dengan baik.
sumber
The
ajax-request
akan mengikuti redirect afaik. Konten aktual (.responseText
,.responseXML
) akan menjadi konten dari halaman yang Anda arahkan ke.Anda mungkin dapat mencegat pengalihan (
status-code
,location-header
) padareadyState
2 atau 3, tetapi tidak yakin tentang hal itu.sumber
getAllResponseHeaders()
sama.