2011-03-20 19 views
24

HTTP 412: Önkoşul Başarısız, bir web hizmeti hatası döndürdüğünüzde ve döndürmemelisiniz, bana göre değil mi? Verileri doğrularken kullanmayı düşünüyorum. Örneğin, bir istemci POST'un XML verileri ve bu verilerde gerekli bir veri öğesi eksikse, o zaman bir 412 ile ve hatanın bir açıklamasıyla yanıt verilir. HTTP 412 ile yanıt ruhu ile uyum, veya başka bir şey (örneğin başka bir http hata kodu veya web uygulaması istisna) kullanılmalıdırHTTP 412 hatasıyla yanıt vermek ne zaman uygun olur?

mu?

cevap

7

Yapabileceğiniz en iyi şey bir 400 code (Bad Request) göndermek kullandım uygulama çoğu web hizmetlerinde 412. kaçınmak olacaktır. Pek çok çerçevenin 400 için yerleşik desteği vardır ve müşterileriniz daha yaygın bir hata kodunu takdir edecektir. Çoğu zaman, özellikle REST arayüzleri ile, basit bir "mesaj" veya "hata" elemanı bir açıklama ile döndürülür.

+2

Müşteriler herhangi bir bilinmeyen 4xx kodunu zaten 400 olarak ele almalıdırlar. –

+1

Peki ya 404? – JoelFan

+0

@JoelFan 404, bilinmeyen bir kod olamaz. Açıkça ele alınmayan 400-499 kodları genel 400 olarak kabul edilirken muhtemelen bir tanesi ele alınmalıdır. – BamaPookie

45

Eğer RFC 2616 bakarsanız bir isteğe koşullarını uygulamak için kullanılabilir istek başlıklarına bir dizi göreceksiniz: istemci sunucu anlatmak için izin Bu başlıklar 'ön şartları' içerirler

If-Match 
If-Modified-Since 
If-None-Match 
If-Range 
If-Unmodified-Since 

sadece belirli koşulları yerine getirdiğinde isteği tamamlamak için. Örneğin, bir kaynağın durumunu güncellemek için bir PUT isteği kullanırsınız, ancak en son GET öğesinden beri kaynak başka biri tarafından değiştirilmediyse yalnızca PUT işleminin gerçekleştirilmesini istiyorsunuz. Bu ön koşullar başarısız

yanıt durum kodu 412 (Ön koşul Başarısız) tipik olarak kullanılır.

Sizin örnek geçersiz istek gibi geliyor (yani istemci nedeniyle eksik değerlerin geçersiz veriler sunmuştur). 400 (Hatalı İstek) durum kodu burada IMO daha uygundur.

+0

@TERACytE bunu kabul edebilecek bir ihtimal var mı? – joelittlejohn

6

412 istek koşullu durumlar için ayrılmıştır ve koşul yerine değildir. kullanımı durumda İçin

, 422 Unprocessable Entity iyi bir uyum sağlar.

+4

'422' durum kodunun RFC 2616'nın bir parçası olmadığını belirtmek gerekir. Bu, WebDAV için HTTP 1.1'in bir uzantısının parçasıdır. – joelittlejohn

+1

joelittlejohn: neden bu bir problem? Durum kodları, RFC 2616'da bir uzantı noktasıdır ve bu çok kullanışlı bir uzantıdır. –

+2

Bunun bir sorun olduğunu ima etmeyi istemedim, sadece bahsetmeye değer :) – joelittlejohn

İlgili konular