Fonksiyonel yönlendirme için HTTP durum

3 Cevap php

Şu anda UI öğeleri göstermek web sayfaları var ve web sayfaları sadece süreç form gönderimler, ve sonra geri UI sayfalara yönlendirme ettik. Onlar PHP'nin header () işlevini kullanarak bunu:

header("Location: /other_page.php");

Bu gönderilecek 302 Bulunan tepki neden olur; HTTP 1.1 spec göre, 302 durumlar içindir "İstenen kaynak, farklı bir tanım altında geçici olarak bulunur." [HTTP 1.1 spec]

İşlevsel olarak, bu güzel, ama bu biz ne yapıyoruz için doğru durum kodu gibi görünüyor doens't. Bu 303 gibi ("See Other") burada uygun durum olduğunu, bu yüzden kullanmak için herhangi bir neden yok merak ediyorum görünüyor. Alan: biz değil, sadece bir konum daha o durum satırı belirtmek olurdu çünkü biz,) başlığının (bizim kullanımında daha açık olması gerekiyor. Düşünceler?

3 Cevap

Ya kullanabilirsiniz, ancak yeniden yönlendirme sonrası yazılan kullanmak için uygun statuscode 303 olduğunu.

Karışıklık tarihsel bir açıklaması var. Başlangıçta, 302 tarayıcı yeniden yönlendirilen istek yöntemini değiştirmek gerektiğini belirtti. Bu tarayıcı bir GET isteği istiyorum yönlendirme-sonra-yazı, için elverişsiz hale getirir. Ancak, tüm tarayıcılar gözlük yanlış yorumluyor ve hep bir GET isteği gibi görünüyor. Belirsizlik HTTP/1.1 temizlemek için iki yeni kodları belirtilmiş:.. 303 ve 307 303 aslında 307 302 orijinal özellikleri belirtir iken pratikte 302 ve 303 değiştirilebilir Yani, 302 de-facto yorumunu belirtir, ve teori, 302 ve 307 vardır.

Eğer really uyumluluğu hakkında bakım, HTTP/1.0 ajanlar 303, anlamak olmayabilir beri 302, 303 daha güvenli bir bahis olduğunu, ancak tüm modern tarayıcılar HTTP/1.1 konuşuyoruz, bu yüzden gerçek bir sorun değildir. Bunu yapmak için en doğru şey olduğundan ben 303, kullanmanızı tavsiye ederim.

Bir yan not; Location alanı tam bir URL olmalıdır. Pratikte bu önemli değil - tarayıcılar bağışlayıcı - ama özellikleri hakkında bakım eğer, bunu yapmak için doğru şey.

Bu bağlantı dediği gibi ben ... kendim hiç kullanmadım:

Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.

Bu 302 ile sopa benim için yeterince iyi bir sebep gibi görünüyor.

Bilginize header() Eğer durum kodunu ayarlayabilirsiniz hangi ekstra parametreleri alır:

header('Location: /foo.php', true, 303);

RoBorg cevabı üzerine genişletmek için, birçok tarayıcılar pek çok HTTP yanıt kodları bir avuç daha anlamıyorum.

Bir yan not: sen hiç arama motoru yerleştirme endişe, 302'ler (sözde) sorunlara neden olabilir.