"आइटम नहीं मिला" त्रुटि पृष्ठ के लिए सबसे उपयुक्त HTTP स्थिति कोड क्या है


117

मैं उत्सुक हूं कि "आइटम मौजूद नहीं है" पृष्ठ के लिए सबसे उपयुक्त HTTP स्थिति कोड क्या है।

यदि पृष्ठ स्वयं मौजूद नहीं है, तो मैं स्पष्ट रूप से 404 का उपयोग करूंगा। हालाँकि, मेरे एक पृष्ठ में एक useridतर्क है (यह एक "उपयोगकर्ता संपादित करें" पृष्ठ है) और यदि कोई उपयोगकर्ता आईडी वाला कोई उपयोगकर्ता मौजूद नहीं है, तो मैं उसे प्रदर्शित कर रहा हूँ त्रुटि पृष्ठ, लेकिन मैं एक 4xx स्टेटस हेडर भेजना चाहूंगा (चूंकि "200 ओके" वास्तव में फिट नहीं है)।

मुझे लगता है कि 404 ठीक होगा क्योंकि यह "नहीं मिला" और "फ़ाइल नहीं मिली" नहीं है, लेकिन मुझे आश्चर्य है कि क्या इस मामले के लिए बेहतर कोड है।

जवाबों:


139

अस्पष्ट-एर HTTP त्रुटि कोड के साथ अत्यधिक चतुर होना एक बुरा विचार है। कभी-कभी ब्राउज़र्स अनपेक्षित तरीकों से प्रतिक्रिया करते हैं जो स्थिति को बाधित करते हैं। 404 के साथ छड़ी।


14
आपको अच्छी सलाह देने के लिए लानत है :( OCD 404 नहीं सभी चीजें हालांकि वास्तविक हैं।
कैरी केंडल

16
404 त्रुटियां एक खराब यूआरआई बनाम इकाई को अलग नहीं करने के लिए कुछ अस्पष्ट हैं। 404s की अवहेलना करने के लिए एक नया मानक कोड आवश्यक है।
ब्रेक्जिट

2
मैं अस्पष्ट स्थिति कोड को वापस करने की तुलना में 204 खाली सामग्री को वापस करना पसंद करता हूं
hsnslh

46

404 रिटर्न कोड का अर्थ वास्तव में 'संसाधन नहीं मिला' है, और किसी भी इकाई पर लागू होता है जिसके लिए अनुरोध किया गया था लेकिन संतुष्ट नहीं है। तो यह पृष्ठों के लिए समान रूप से अच्छी तरह से काम करता है, पृष्ठों का उपखंड, और पृष्ठ पर मौजूद किसी भी आइटम का एक विशिष्ट अनुरोध होता है।

तो इस परिदृश्य में उपयोग करने के लिए 404 सही कोड है। ध्यान दें कि यह 'सर्वर से नहीं मिला' पर लागू नहीं होता है, जो एक अलग स्थिति है जिसमें एक अनुरोध जारी किया गया था, लेकिन इसका जवाब नहीं दिया गया था, जैसा कि उत्तर देने के लिए विरोध किया गया था, लेकिन संसाधन के बिना अनुरोध नहीं किया गया।


1
क्या होगा यदि मैं आईडी = 1 के साथ foo ऑब्जेक्ट को अपडेट करना चाहता हूं और इस आईडी के साथ डेटाबेस में कोई फू नहीं है?
वैलीजॉन

1
इस परिदृश्य में, आपको ठीक करने के लिए एक संगामिति समस्या है: यदि आपने id = 1 के साथ किसी वस्तु को पुनः प्राप्त किया है और यह अब मौजूद नहीं है जब आप इसे अद्यतन करने का प्रयास करते हैं, तो किसी अन्य थ्रेड या प्रक्रिया ने आपके लॉक को अनदेखा कर दिया (या आपने कोई सेट नहीं किया) और इसे हटा दिया। यह अच्छा नहीं है। वैकल्पिक रूप से, यदि आप ऑब्जेक्ट आईडी = एन (जहां एन आपको प्रदान किया गया है) को अपडेट करने की कोशिश कर रहे हैं, तो पहले चेक किए बिना यह मौजूद है, आपको अपने अपडेट लॉजिक में एक सत्यापन चरण याद आ रहा है, जो भी अच्छा नहीं है।
आठ-बिट गुरु


8

यह निर्भर करता है कि उपयोगकर्ता एक संसाधन पहचानकर्ता या अतिरिक्त पैरामीटर है। यदि ऐसा है तो 404 वापस करना ठीक है यदि आप अन्य कोड को वापस नहीं कर सकते हैं

400 (bad request) ‐ indicates a bad request
या
412 (Precondition Failed) e.g. conflict by performing conditional update

अधिक जानकारी मुफ्त में InfoQ Explores: REST पुस्तक।


1
"अतिरिक्त पैरामीटर" कहकर आप हेडर फ़ील्ड का अनुरोध करते हैं? अन्यथा मैं 412 का उपयोग करने की अनुशंसा नहीं करूंगा। "412 (Precondition Failed) स्थिति कोड इंगित करता है कि सर्वर पर परीक्षण किए जाने पर अनुरोध हेडर फ़ील्ड में दिए गए एक या अधिक शर्तों का मूल्यांकन गलत है।"
सेरी का
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.