मैं 412 सोच रहा हूं (Precondition Failed) लेकिन एक बेहतर मानक हो सकता है?
मैं 412 सोच रहा हूं (Precondition Failed) लेकिन एक बेहतर मानक हो सकता है?
जवाबों:
स्थिति 422 युक्ति के आधार पर सबसे अधिक उपयुक्त लगती है ।
422 (Unprocessable Entity) स्थिति कोड का अर्थ है कि सर्वर अनुरोध इकाई की सामग्री प्रकार को समझता है (इसलिए 415 (असमर्थित मीडिया प्रकार) स्थिति कोड अनुचित है), और अनुरोध इकाई का सिंटैक्स सही है (इस प्रकार 400 (खराब अनुरोध) ) स्थिति कोड अनुचित है) लेकिन निहित निर्देशों को संसाधित करने में असमर्थ था। उदाहरण के लिए, यह त्रुटि स्थिति तब हो सकती है जब किसी XML अनुरोध बॉडी में अच्छी तरह से गठित (यानी, वाक्यविन्यास रूप से सही) हो, लेकिन शब्दार्थ गलत, XML निर्देश।
वे कहते हैं कि विकृत xml खराब सिंटैक्स (400 के लिए कॉल) का एक उदाहरण है। एक विकृत क्वेरी स्ट्रिंग इस के अनुरूप है, इसलिए 400 एक अच्छी तरह से निर्मित क्वेरी-स्ट्रिंग के लिए उपयुक्त नहीं लगता है जो एक परम को याद कर रहा है।
UPDATE @DavidV सही ढंग से बताता है कि यह युक्ति WebDAV के लिए है, कोर HTTP नहीं। लेकिन कुछ लोकप्रिय गैर-WebDAV API बेहतर स्थिति कोड की कमी (इसे देखें ) के लिए, वैसे भी 422 का उपयोग कर रहे हैं ।
400
है कि अधिक उपयुक्त है।
मुझे यकीन नहीं है कि एक सेट मानक है, लेकिन मैंने 400 खराब अनुरोध का उपयोग किया होगा , जो नवीनतम HTTP कल्पना (2014 से) दस्तावेज़ निम्नानुसार हैं :
6.5.1। 400 गलत अनुरोध400 (खराब अनुरोध) स्थिति कोड इंगित करता है कि सर्वर क्लाइंट त्रुटि के कारण होने वाली चीज़ के कारण अनुरोध को संसाधित नहीं कर सकता है या नहीं करेगा (उदाहरण के लिए, विकृत अनुरोध वाक्यविन्यास, अमान्य अनुरोध संदेश फ़्रेमिंग, या भ्रामक अनुरोध रूटिंग)।
400 Bad Request
प्रोटोकॉल स्तर की समस्याओं को इंगित करने के लिए है, शब्दार्थ त्रुटियाँ नहीं। यदि हम एप्लिकेशन-स्तर (प्रोटोकॉल-स्तर की बजाय) त्रुटियों को इंगित करने के लिए HTTP स्थिति कोडों को हाईजैक करने जा रहे हैं, तो सभी तरह से क्यों न जाएं और बस उपयोग करें 412
?
WCF एपीआई नेट हैंडल में एक वापस लौट कर पैरामीटर मौजूद नहीं HTTP 404
"Endpoint नहीं मिला" त्रुटि, का उपयोग करते समय WebHttpBinding ।
404 Not Found
यदि आप अपने पैरामीटर हस्ताक्षर के साथ एक साथ अपने वेब सेवा विधि नाम पर विचार मतलब कर सकते हैं। यही है, यदि आप एक वेब सेवा विधि को उजागर करते हैं LoginUser(string, string)
और आप अनुरोध करते हैं LoginUser(string)
, तो उत्तरार्द्ध नहीं मिला है।
मूल रूप से इसका मतलब यह होगा कि आपके द्वारा निर्दिष्ट वेब सेवा पद्धति, आपके द्वारा निर्दिष्ट पैरामीटर हस्ताक्षर के साथ नहीं मिल सकती है।
10.4.5 404 नहीं मिला
सर्वर को अनुरोध-यूआरआई से मेल खाते हुए कुछ भी नहीं मिला है। कोई संकेत नहीं दिया जाता है कि क्या स्थिति अस्थायी या स्थायी है।
400 Bad Request
, के रूप में गर्ट सुझाव दिया , एक वैध प्रतिक्रिया कोड बनी हुई है, लेकिन मैं इसे सामान्य रूप से निचले स्तर की समस्याओं को इंगित करने के लिए किया जाता है लगता है। इसे आसानी से एक विकृत HTTP अनुरोध के रूप में व्याख्या किया जा सकता है, शायद गुम या अमान्य HTTP हेडर, या समान।
10.4.1 400 खराब अनुरोध
अनुरोध सर्वर द्वारा विकृत सिंटैक्स के कारण समझा नहीं जा सका। ग्राहक बिना संशोधनों के अनुरोध को नहीं दोहराएगा।
आप 400 खराब अनुरोध कोड भेज सकते हैं। यह अधिक सामान्य-उद्देश्य 4xx स्टेटस कोड में से एक है, इसलिए आप इसका उपयोग उस उद्देश्य के लिए कर सकते हैं जो आप चाहते हैं: ग्राहक एक अनुरोध भेज रहा है जो जानकारी / पैरामीटर को गायब कर रहा है जिसे आपके एप्लिकेशन को सही ढंग से संसाधित करने के लिए आवश्यक है।
हमारे एपीआई प्रोजेक्ट में से एक में हम कुछ अनुरोधों के लिए 409 स्टेटस तय करते हैं, जब हम लापता पैरामीटर के कारण इसे 100% पर नहीं भर सकते।
HTTP स्थिति कोड "409 संघर्ष" हमारे लिए एक अच्छी कोशिश थी क्योंकि परिभाषा के लिए उपयोगकर्ता के लिए संघर्ष के स्रोत को पहचानने के लिए पर्याप्त जानकारी शामिल करना आवश्यक है।
संदर्भ: w3.org/Protocols/
तो 400 या 404 जैसी अन्य प्रतिक्रिया के बीच, हमने नए और सही अनुरोध को स्थापित करने के लिए सहायक अनुरोध में कुछ नोटों की तलाश की आवश्यकता को लागू करने के लिए 409 को चुना।
किसी भी तरह से हमारा मामला यह विशेष था क्योंकि हमें अनुरोध पूरी तरह से सही नहीं होने पर कुछ डेटा पूर्व संध्या पर भेजने की आवश्यकता है, और हमें क्लाइंट को संदेश को देखने और समझने की आवश्यकता है कि अनुरोध में क्या गलत था।
सामान्य तौर पर अगर हमारे पास केवल कुछ लापता पैरामीटर हैं तो हम 400 और लापता पैरामीटर की एक सरणी के लिए जाते हैं। लेकिन जब हमें कुछ और जानकारी भेजने की आवश्यकता होती है, जैसे किसी विशेष मामले का संदेश और हम यह सुनिश्चित करना चाहते हैं कि ग्राहक इसका ख्याल रखेगा तो हम 409 भेजेंगे।
मैं आमतौर पर 422 (अनप्रोसेबल इकाई) के लिए जाता हूं यदि आवश्यक पैरामीटर में कुछ भी मेल नहीं खाता है जो एपीआई एंडपॉइंट की आवश्यकता है (जैसे कि एक बहुत छोटा पासवर्ड) लेकिन एक लापता पैरामीटर के लिए मैं 406 (अस्वीकार्य) के लिए जाऊंगा।
Accept-Language: de
, यह दर्शाता है कि यह केवल जर्मन में प्रतिक्रियाओं को स्वीकार करेगा, लेकिन आपके सर्वर के पास उपलब्ध दस्तावेज़ के केवल संस्करण अंग्रेजी या फ्रेंच में हैं।) अनुरोध में लापता पैरामीटर को इंगित करने के लिए इसका उपयोग करना गलत है। प्रति परिभाषा में।
रुचि रखने वालों के लिए, स्प्रिंग एमवीसी (3.x कम से कम) इस मामले में 400 लौटाता है, जो मुझे गलत लगता है।
मैंने कई Google URL (accounts.google.com) का परीक्षण किया और आवश्यक पैरामीटर हटा दिए, और वे इस मामले में आम तौर पर 404 वापस करते हैं।
मैं Google को कॉपी करूंगा।
यह तर्क दिया जा सकता है कि एक 404 Not Found
का उपयोग किया जाना चाहिए क्योंकि निर्दिष्ट संसाधन नहीं मिल सकता है।
मैं अक्सर 403 निषिद्ध त्रुटि का उपयोग करता हूं। तर्क यह है कि अनुरोध को समझा गया था, लेकिन मैं ऐसा नहीं करूंगा जैसा कि पूछा गया है (क्योंकि चीजें गलत हैं)। प्रतिक्रिया इकाई बताती है कि क्या गलत है, इसलिए यदि प्रतिक्रिया HTML पृष्ठ है, तो पृष्ठ में त्रुटि संदेश हैं। यदि यह JSON या XML प्रतिक्रिया है, तो त्रुटि जानकारी वहां है।
से rfc2616 :
10.4.4 403 निषिद्ध
सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है।
प्राधिकरण मदद नहीं करेगा और अनुरोध को दोहराया नहीं जाना चाहिए।
यदि अनुरोध विधि HEAD नहीं थी और सर्वर यह
सार्वजनिक करना चाहता है कि अनुरोध क्यों पूरा नहीं हुआ है, तो यह इकाई में इनकार के कारण का वर्णन करेगा। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं कराना चाहता है, तो
इसके बजाय स्थिति कोड 404 (नहीं मिला) का उपयोग किया जा सकता है।
Authorization will not help
, इसलिए ट्विटर को अमान्य OAuth क्रेडेंशियल्स के लिए यह नहीं भेजना चाहिए।
401 Unauthorized
इसके बजाय भेजना चाहिए । हालाँकि, आप समझ सकते हैं कि यदि आप एमडीएन डॉक्स के इन दोनों कोडों के विवरणों को देखते हैं तो वे क्यों नहीं करते हैं, जो बहुत समान हैं।
ASP.NET Core को एक संदर्भ या उदाहरण के रूप में उपयोग करने के लिए, ASP.NET Core आपको कंट्रोलर को क्रियाओं से रूबरू कराता है, इस प्रकार “विवरण” एक्शन दिखता है।
// GET: Cars/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var car = await _context.Cars.FirstOrDefaultAsync(m => m.CarId == id);
if (car == null)
{
return NotFound();
}
return View(car);
}
यदि पैरामीटर id
सेट नहीं है, तो यह 404 रिटर्न नहीं मिला।
404 लौटाएँ - जिसका अर्थ है कि संसाधन नहीं मिला।
किसी ऐसी साइट के URL को संपादित करने का प्रयास करें जिसमें एक आईडी हो। मैंने कुछ कोशिश की:
सभी 404 लौटाते हैं, क्योंकि वे डेवलपर्स मानक की सही ढंग से व्याख्या कर रहे हैं, जिसका उत्तर यहां और कई अन्य हैं, नहीं!
requestBody
।
मैं 403 के साथ जाऊंगा।
से RFC 2616 - हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - HTTP / 1.1
403 निषिद्ध
सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है। प्राधिकरण मदद नहीं करेगा और अनुरोध को दोहराया नहीं जाना चाहिए। यदि अनुरोध विधि HEAD नहीं थी और सर्वर यह सार्वजनिक करना चाहता है कि अनुरोध क्यों पूरा नहीं हुआ है, तो यह इकाई में इनकार के कारण का वर्णन करेगा। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं कराना चाहता है, तो इसके बजाय स्थिति कोड 404 (नहीं मिला) का उपयोग किया जा सकता है।
आपको अपनी प्रतिक्रिया में विफलता का कारण बताना चाहिए। यदि आप इसे नहीं करना पसंद करते हैं, तो बस 404 का उपयोग करें।