302 ve 303 örnekleri


22

A 302ile 303cevap arasındaki fark nedir ?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • 10.3.3 302 Bulundu
  • 10.3.4 303 Diğerlerine Bak

Bunlar birbiriyle değiştirilebilir mi yoksa neden biri diğerinde kullanılıyor? Lütfen birinin ne zaman ve ne zaman kullanılmayacağını gösteren bir kullanım durumu sunabilir misiniz?

Yanıtlar:


35

Bağlandığınız sayfadaki açıklama, amaçlanan amaçlarını oldukça açıklayıcı görünüyor:

302 yönlendirmesi, yönlendirmenin geçici olduğunu gösterir - istemciler gelecekteki isteklerde orijinal URL’yi tekrar kontrol etmelidir.

Bir 303 yönlendirmesi, bir POSTtalebi bir GETkaynağa yönlendirmek içindir (aksi halde müşteri, yeni konum için istek yönteminin orijinal kaynakla aynı olduğunu varsayar).

Bir müşteriyi web uygulamanızın bir parçası olarak yönlendiriyorsanız ancak onların her zaman web uygulamasından başlamasını beklerseniz (örneğin, bir URL kısaltıcı), 302 yönlendirmesi bir anlam ifade ediyor gibi görünüyor. Bir 303 yönlendirmesi, POSTbir müşteriden veri alırken (örneğin, bir form gönderimi) ve bunları (örneğin, standart bir sayfa isteği) GETyerine, alınacak yeni bir web sayfasına yönlendirmek istediğinizde kullanılır POST.

Ancak durum kodu tanımlarından bu notu görün - çoğu müşteri 302 veya 303 için aynı şeyi yapar:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

4
Açık ama yanlış. 303 yönlendirmesi kalıcı değil . RFC "303 yanıtının önbelleklenmemesi GEREKİR" ifadesini veriyor . Burada verdiğiniz açıklama 301 yönlendirmesine uyuyor.
Ladadadada

2
Mea Culpa. Geriye 301 ve 303 vardı. Cevabı güncelledim.
larsks

Şimdi 308 var
Miranda

Bence bir POST'u bir GET - tam durağına yönlendirmek için 303'ün "kastedildiğini" önermek biraz yanıltıcı olabilir. Teknik özellik, 303'ün, bir kaynağın orijinal olarak istenen yöntemle temsil edilmesinin mevcudiyeti ile ilgili olduğunu ileri sürer. Örneğin, yalnızca kimliği doğrulanmış kullanıcılar tarafından kullanılabilen haklarla korunan büyük bir resme sahipsem, kimliği doğrulanmamış kullanıcıları daha küçük bir resme yönlendirmek için 303 kullanabilirim. Böyle bir durumda kullanılan istek yöntemi önemsizdir.
beaudet

RFC , "Bu yöntem öncelikle POST ile etkinleştirilen bir komut dosyasının çıktısının kullanıcı aracısını seçili bir kaynağa yönlendirmesine izin vermek için var" diyor. ve "İsteğe verilen cevap farklı bir URI altında bulunabilir ve bu kaynakta bir GET yöntemi kullanılarak alınmalıdır". Sanırım bu söylediklerime çok uyuyor (hepsi yıllar önce), ancak yorum için yer olduğundan eminim.
larkslar

15

Dört farklı yönlendirme türü vardır (şu anda). Başlangıçta sadece iki tane vardı, ancak çoğu müşteri 302 yönlendirmesini yanlış uyguladı, bu yüzden iki 30 tane daha aldıklarında iki olası davranış arasındaki farkı netleştirmek için eklendi.

Bağladığınız RFC bunu 302 yönlendirmelerindeki bölümde belirtir:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Bir 301 yönlendirmesi kalıcı bir yönlendirmedir. Önbelleğe alınabilir durumdadır ve bu URL için yer imlerinin tümü yeni URL'yi gösterecek şekilde güncellenmelidir.
  2. 302 yönlendirmesi geçici bir yönlendirmedir. Varsayılan olarak önbelleklenebilir değildir ve her seferinde yeniden istenmelidir (ancak bunu önbelleğe alma başlıklarıyla geçersiz kılabilirsiniz). Takip talebi, orijinal istekle aynı yöntemi kullanmalıdır (POST, GET, CONNECT, PUT, DELETE, vb.) Ve GET ve HEAD istekleri dışındaki herhangi bir şey için, müşteriden talepte bulunmadan önce kullanıcıyı uyarması gerekir. Bu, müşterilerin yanlış anladığı ve çoğu, orijinal yöntem ne olursa olsun, takip isteği için yöntemi GET olarak değiştirmiştir.
  3. Bir 303 yönlendirmesi, 302 ile aynıdır, ancak takip isteği şimdi açıkça bir GET isteğine değiştirilir ve onay gerekmez.
  4. Bir 307 yönlendirmesi, 302 ile aynıdır, ancak takip isteği şimdi açıkça orijinal istekle aynıdır ve GET ve HEAD dışındaki istek yöntemleri için kullanıcıdan alınmalıdır.

Daha eski istemciler 303 yönlendirmesini anlamayabilir. HTTP / 1.1 isteği yapan herhangi bir şey 303 yanıtını anlamalıdır.

300 ve 305 yanıtlarını yönlendirmeler olarak düşünmek mümkündür, bu da altı farklı tür olduğu anlamına gelir.


0

Kullanılan yönlendirme türleri (301.302.303 ...), arama motorlarının içeriği nasıl endeksleyeceği ve sıralayacağı üzerinde büyük etkiye sahiptir. Bazı örümcekler geçici olarak yönlendirilen içeriği endekslemeyi reddedebilir. Detaylar çeşitli SEO literatüründe bulunabilir ...

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.