XHR isteğine yanıt olarak yeniden yönlendirme


Yanıtlar:


216

Tarayıcı bir ajax isteğine bir yönlendirme yanıtı alırsa ne olur?

Sunucu bir yönlendirme gönderirse (302 yanıtı artı Konum: başlık olarak da bilinir), yönlendirmeyi otomatik olarak tarayıcı izler. İkinci talebe verilen yanıt (başka bir yönlendirme de olmadığı varsayılarak) programınıza maruz kalan şeydir.

Aslında, 302 yanıtının olup olmadığını tespit etme olanağınız yoktur. 302 yönlendirmesi bir 200'e yönlendirirse, programınız orijinal istek doğrudan bir 200'e yönlendirmiş gibi davranır.

Bu hem tecrübem hem de spesifikasyonda belirtilen davranış oldu .

2016 Güncellemesi: Zaman geçti ve iyi haber şu ki, yeni fetch () API'sı , yönlendirmelerin nasıl ele alınacağı konusunda XHR'ye benzer varsayılan davranışla daha ayrıntılı bir kontrol sunacak . Bununla birlikte, yalnızca fetch () yönteminin yerel olarak uygulandığı yerde çalışır . XHR tabanlı fetch () 'in çoklu dolgu sürümlerinde XHR sınırlamaları devam etmektedir . Neyse ki, yerel tarayıcı desteği güzel bir şekilde yuvarlanıyor gibi görünüyor.


47
İlginç bir şekilde, buna geldim çünkü yönlendirmenin izlenmediği bir durum yaşıyorum ... bu, yönlendirme aynı menşe politikasını ihlal ettiğinde gerçekleşir.
Gus

4
@ Muhtemelen mantıklı olan
Dmitry

1
401'e (veya herhangi bir 4xx veya 5xx hatasına) yönlendirme durumunda, programınızın istek doğrudan 401'e yönlendirilmiş gibi davrandığını varsayarım. Gördüğünüz şey bu değil mi?
greim

2
Bir RESTful API, bir POST isteğinden sonra 201 ve bir Konum başlığı gönderebilir; restapitutorial.com/lessons/httpmethods.html adresine bakın .

1
2019 güncellemesi: 3 yıl önce beklediğimiz gibi fetch çalışmıyor):
lcjury

7

ajax-requestBu yönlendirme afaik izleyecektir. Gerçek içerik ( .responseText, .responseXML) yönlendirildiğiniz sayfadaki içerik olacaktır.

2 veya 3 üzerindeki yönlendirmeyi ( status-code, location-header) kesebilir readyState, ancak bundan emin değilsiniz.


Hayır, bütün bu devletler tam olarak aynı statüye sahiptir. Değeri bile getAllResponseHeaders()eşittir.
sebastianwagner
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.