Apakah mungkin untuk mencegah browser mengikuti pengalihan saat mengirim XMLHttpRequest-s (yaitu untuk mendapatkan kembali kode status pengalihan dan menanganinya sendiri)?
112
Apakah mungkin untuk mencegah browser mengikuti pengalihan saat mengirim XMLHttpRequest-s (yaitu untuk mendapatkan kembali kode status pengalihan dan menanganinya sendiri)?
Tidak sesuai dengan standar W3C untuk objek XMLHttpRequest (penekanan ditambahkan):
Jika responsnya adalah pengalihan HTTP:
Jika asal URL yang disampaikan oleh header Lokasi adalah asal yang sama dengan asal XMLHttpRequest dan pengalihan tidak melanggar tindakan pencegahan loop tak terbatas, ikuti pengalihan secara transparan sambil mengamati aturan peristiwa permintaan asal yang sama.
Mereka sedang mempertimbangkannya untuk rilis di masa mendatang:
Spesifikasi ini tidak menyertakan fitur berikut yang sedang dipertimbangkan untuk versi mendatang dari spesifikasi ini:
- Properti untuk menonaktifkan pengalihan berikut;
tetapi spesifikasi terbaru tidak lagi menyebutkan hal ini.
Baru Fetch API mendukung modus yang berbeda dari penanganan redirect:
follow
,error
, danmanual
, tapi aku tidak bisa menemukan cara untuk melihat URL baru atau kode status saat pengalihan telah dibatalkan. Anda hanya dapat menghentikan pengalihan itu sendiri, dan kemudian terlihat seperti kesalahan (respons kosong). Jika hanya itu yang Anda butuhkan, Anda siap melakukannya.Juga Anda harus menyadari bahwa permintaan yang dibuat melalui API ini tidak dibatalkan belum .Mereka yang sekarang.Adapun XMLHttpRequest, Anda dapat
HEAD
server dan memeriksa apakah URL telah berubah:Anda tidak akan mendapatkan kode status, tetapi akan menemukan URL baru tanpa mengunduh seluruh halaman darinya.
sumber
OPTIONS
mungkin merupakan pilihan yang lebih baik, namun hanya berfungsi untuk tujuan non-umum, dll. Administrator telah mengonfigurasi pengalihan seluruh situs / skema, seperti HTTP -> HTTPSAnda dapat menggunakan
responseURL
properti untuk mendapatkan tujuan pengalihan atau memeriksa apakah respons pada akhirnya diambil dari lokasi yang Anda terima.Ini tentu saja berarti bahwa hasilnya tetap diambil, tetapi setidaknya Anda bisa mendapatkan info yang diperlukan tentang tujuan pengalihan dan misalnya mendeteksi kondisi saat Anda ingin membuang respons.
sumber
Tidak, Anda tidak ada tempat di API yang diekspos oleh XMLHttpRequest yang memungkinkan Anda menimpa perilaku defaultnya dengan mengikuti 301 atau 302 secara otomatis.
Jika klien menjalankan IE di windows maka Anda dapat menggunakan WinHTTP sebagai gantinya untuk mengatur opsi untuk mencegah perilaku itu tetapi itu adalah solusi yang sangat membatasi.
sumber