Ana içeriğe geç

Rehberler / HTTP durum kodları açıklandı

303 See Other: bir form POST'undan sonraki yönlendirme

303 See Other, istemciye isteğin işlendiğini ve sonucun farklı bir URL'de olduğunu, bunu GET ile getirmesi gerektiğini söyler. Ziyaretçiyi POST üzerinde bırakmak yerine bir sonuç veya onay sayfasına götürmesi gereken bir form gönderimine doğru yanıt budur.

303 ne içindir

Bir 303, aslında bir kaynağı taşımakla ilgili değildir. Bir eylemi sonucundan ayırmakla ilgilidir. İstemci bir POST gönderir, sunucu eylemi gerçekleştirir, ve ardından sonucu POST yanıtında döndürmek yerine 303 ile bir Location başlığıyla yanıt verir. İstemci o konuma yeni bir GET yapar, ve tarayıcının adres çubuğu, yer imine eklenebilen ve yeniden yüklenebilen sıradan bir URL'de son bulur.

Belirleyici kural yöntemdir: orijinal istek yöntemi ne olursa olsun, Location URL'sine yapılan takip isteği bir GET'tir. Bu, orijinal yöntemin ve gövdenin korunmasını gerektiren 307 ve 308'in tam tersidir.

Post/Redirect/Get, ve çözdüğü sorun

Bir POST'tan sonra bir yönlendirme olmadan, sonuç sayfası POST isteğine ait olur, bu da tanıdık sorunlara yol açar:

  • Yeniden yüklemeye basmak formu yeniden gönderir, bu yüzden sipariş iki kez verilir veya yorum iki kez gönderilir. Tarayıcılar bunu bir "form yeniden gönderimini onayla" iletişim kutusuyla uyarır; bu da başlı başına kötü bir deneyimdir.
  • Sayfa yer imine eklenemez veya paylaşılamaz, çünkü URL içeriği tanımlamaz.
  • Geri düğmesi önceki sayfa yerine bir yeniden gönderim istemine iner.

Post/Redirect/Get bunların hepsini düzeltir. POST eylemi gerçekleştirir ve 303 ile yanıt verir; tarayıcı sonuç URL'sine GET yapar; bir yeniden yükleme artık yalnızca zararsız bir sayfayı yeniden getirir. Hemen hemen her çerçevenin bir "kaydettikten sonra yönlendir" yardımcısı olmasının nedeni budur.

303 - 302 - 307 karşılaştırması

  • 302 Found, yöntem işlemesi tarihsel olarak belirsiz olan geçici bir yönlendirmedir. Çoğu istemci onu takip ederken bir POST'u GET'e çevirir; bu genellikle istediğiniz şeydir, ama standart bunu zorunlu kılmaz. Birçok çerçeve hala post-sonra-yönlendir için 302 verir ve pratikte işe yarar.
  • 303 See Other bu davranışı açık ve zorunlu hale getirir. Niyetiniz "POST'umu tekrarlama, git ve bunun yerine bunu GET yap"sa, 303 bunu belirsizlik bırakmadan ifade eder.
  • 307 Temporary Redirect, burada kaçınılması gereken seçenektir. Yeni URL'ye karşı POST'un tekrarlanmasını gerektirir; bu da bir form gönderimi için eylemi iki kez gerçekleştirmek anlamına gelir.

Pratik bir uyarı: 303, HTTP/1.1'de tanıtıldı, bu yüzden HTTP/1.0 konuşan bir istemci bunu anlamayabilir. Bazı çerçeveler bu nedenle varsayılan olarak 302 verir. Modern webde bu nadiren gerçek bir kısıtlamadır, ama diller arasında göreceğiniz varsayılan ayrımı açıklar.

303'ün göründüğü diğer yerler

  • Uzun süren işler başlatan API'ler. Bir POST bir işi başlatır ve o işin durum URL'siyle 303, veya gövdede bir durum URL'siyle 202 döndürür. İki desen de kullanımdadır; 303'ün avantajı bir tarayıcının onu otomatik olarak takip etmesidir.
  • OAuth ve oturum açma akışları. Bazı yetkilendirme sunucuları, geri çağırmanın isteğin nasıl geldiğinden bağımsız olarak GET ile getirilmesi için bir 303 ile istemci uygulamasına geri yönlendirir.
  • Gerçek dünyadaki bir şeyi onu tanımlayan belgeden ayıran ve istemcileri tanımlayıcıdan belgeye göndermek için 303 kullanan bağlantılı veri ve içerik görüşmesi kurulumları.

Nasıl kullanılır ve doğrulanır

  1. Başarılı bir POST'tan sonra, sonuç sayfasına işaret eden mutlak bir Location ile 303 döndürün. Sonucu satır içinde işlemeyin.
  2. Hedefi idempotent yapın. Her yeniden yüklemede ve her geri gitmede yeniden getirilecektir, bu yüzden tekrar tekrar GET yapılması güvenli olmalıdır.
  3. "Değişiklikleriniz kaydedildi" gibi tek seferlik bir mesajı, yönlendirme gövdesinde değil, oturum durumunda veya bir sorgu parametresinde taşıyın. Bir 303 yanıt gövdesi normalde görüntülenmez.
  4. Kodu ve hedefi doğrulayın:
    curl -si -X POST -d "name=test" https://example.com/submit | grep -Ei "^(HTTP|location)"
    HTTP/1.1 303 See Other'ı ve sonuç URL'sini görmelisiniz.
  5. Onu takip edin ve ikinci isteğin 200 döndüren bir GET olduğunu doğrulayın. Sunucu günlüklerinizde tekrarlanan bir POST görüyorsanız, kural bir 307'dir ve değiştirilmesi gerekir.
  6. Hedefin kendisinin bir yönlendirme olmadığını kontrol edin. Bir 301'e giden bir 303, gerçek sayfaya giden, tek bir form gönderimi için üç gidiş dönüştür.

Bir formun arkasındaki uç noktaları izleme

Yalnızca ana sayfayı getiren bir kontrol için, bozuk bir post-sonra-yönlendir akışı görünmezdir. Site ayaktadır, form işlenir, ve yalnızca onu gönderen insanlar hatayla karşılaşır. Sonuç sayfası, onay URL'si ve iş durumu rotası gibi eylemin arkasındaki uç noktaları izleyerek ve her birinde beklenen durum kodunu ve içeriği doğrulayarak bunu erken yakalayın. HostTracker 13 monitör türü sunar ve e-posta, SMS, sesli arama, Slack, Telegram ve daha fazlasıyla uyarır. Herhangi bir URL'nin ne döndürdüğünü HTTP kontrol aracıyla kontrol edin, ve komşu kodlar için 301 - 302 karşılaştırması ve tam 3xx yönlendirme ailesi rehberini okuyun.

Şimdi kontrol edin

Ücretsiz kontrolü kendi sitenizde çalıştırın - hesap gerekmez.

HTTP check

Bunu sürekli izleyin

Bir sorun çıktığı anda haberdar olun: HostTracker 300’den fazla konumdan kontrol eder ve size e-posta, SMS, Slack, Telegram ve daha fazlasıyla bildirim gönderir.

HostTracker özellikleri

Bu bölümde daha fazlası: HTTP durum kodları açıklandı