2011-01-03 26 views
27

201 cevabı ile yönlendirmenin bir yolu var mı?201 ile yeniden yönlendirme oluşturuldu

RFC, yeni oluşturulan kaynağın Location başlığında belirtilmesi gerektiğini belirtir ve ben bunu belirtirim. Tarayıcının yönlendireceğini, ancak sayfanın içeriği olmasa bile yapamayacağını varsaydım.

Kullanıcı, POST eyleminden sonra yeni kaynağa yönlendirilmek istiyorum. Bu nedenle, 303 See Other'u kullanmaya karar verdim, ancak 201 daha uygun görünüyor.

Bu yüzden, popüler tarayıcıları kullanıcı müdahalesi olmadan ve Javascript'e güvenmeden otomatik olarak yeniden yönlendirmenin bir yolu var mı?

cevap

18

İki farklı anlamsal yanıtı karıştırıyorsunuzdur - biri müşteriye bir kaynağı başarıyla oluşturduğunuzu ve bunun nerede olduğunu anlatıyor. İstemcinin getirip getirmeyeceği veya farklı bir hikaye olup olmadığı.

İkincisi, istemciye istediği bir kaynak için yanlış konum URI'sı gönderdiğini ve tekrar denemesi gerektiğini, ancak farklı bir URI ile anlatıyor.

bir 303 bu durumda uygun - aslında, açık bir şekilde bunun için tavsiye edilir:

öncelikle bir POST eylem çıkışını sağlamak için kullanılır

(rfc den)

kullanıcı arayüzü yönlendirmek için seçili bir kaynağa, bu nedenle, POST yanıtına karşılık gelen bilgiyi, orijinal talepten bağımsız olarak ayrı olarak tanımlanabilen, yer imi ve önbelleğe alınabilen bir biçimde sağlar.

+5

"İkincisi, istemciye istekte bulunduğu kaynak için yanlış konum URI'sı gönderdiğini söylüyor" istek yöntemi yalnızca GET ise. Bazen bir kaynağa POST için meşrudur ve farklı bir URI ile yeni bir alt kaynak oluşturmasını sağlar. –

2

Refresh başlık gönderebilirsiniz.

4

3xx durum kodları biri aracılığıyla bir yönlendirme eylemi yürürlüğe olacak tarayıcı, belirtim kullanıcı arayüzlerinin Bunu bir zorlar olmadığını görmek için bir yenileme başlığını göndermeyi deneyebilirsiniz bir 201. ile yönlendirme gerektiğini tanımlamaz Location başlığına yönlendirin, ancak buna güvenmeyeceğim. Neden bir 3xx cevabı ile sopa değil?

1

ilk kez bu uğraşıyorum ve bu benim yapmak karar verdik budur:

  • GET /user/new - kullanıcı kayıt formu ile>200 Ok.
  • POST /user ->201 Created Yeni bir kullanıcı, GET /user numaralı yolla aynı içerikle yanıt verin.
  • GET /user - /user/new bağlanan anonim ziyaretçiler için kullanıcı profili kimliği doğrulanmış kullanıcı için sayfanın veya, 307 Temporary Redirect/login için, birlikte>200 Ok.

güncelleme

Ben kullanıcı POST /user bir cevap olarak kılınmış sayfayı yeniler, onlar sonrası verilerini yeniden çünkü bu kötü bir fikir olduğunu öğrendim. Bir başkasının aynı parlak fikri olması durumunda cevabı burada bırakacağım.

+2

Bu güncellemeden ayrıldığınız için teşekkür ederiz. Aynı çizgileri düşünüyordum ve muhtemelen bana bir sürü iş kurtardın. – rmeador

İlgili konular