http-headers 403 निषिद्ध बनाम 401 अनधिकृत HTTP प्रतिक्रियाएं




7 Answers

RFC2616 देखें:

अनधिकृत 401:

अगर अनुरोध में पहले से ही प्राधिकरण प्रमाण-पत्र शामिल हैं, तो 401 प्रतिक्रिया इंगित करती है कि उन प्रमाण-पत्रों के लिए प्राधिकरण को अस्वीकार कर दिया गया है।

403 निषिद्ध:

सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है।

अद्यतन करें

आपके उपयोग के मामले से, ऐसा प्रतीत होता है कि उपयोगकर्ता प्रमाणीकृत नहीं है। मैं 401 वापस आऊंगा।

संपादित करें: RFC2616 अप्रचलित है, RFC7231 और RFC7235 RFC7231 देखें।

http-headers http-status-code-403 http-status-codes http-status-code-401 http-response-codes

एक ऐसे वेब पेज के लिए जो मौजूद है, लेकिन जिसके लिए उपयोगकर्ता के पास पर्याप्त विशेषाधिकार नहीं हैं, (वे लॉग इन नहीं हैं या उचित उपयोगकर्ता समूह से संबंधित नहीं हैं), सेवा के लिए उचित HTTP प्रतिक्रिया क्या है? 401? 403? कुछ और? मैंने जो कुछ भी पढ़ा है, वह दोनों के बीच के अंतर पर बहुत स्पष्ट नहीं है। प्रत्येक प्रतिक्रिया के लिए केस का क्या उपयोग उपयुक्त है?




आरएफसी 2616 (HTTP / 1.1) 403 के अनुसार भेजा जाता है जब:

सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है। प्रमाणीकरण मदद नहीं करेगा और अनुरोध दोहराया नहीं जाना चाहिए। अगर अनुरोध विधि HEAD नहीं थी और सर्वर सार्वजनिक करना चाहता है कि अनुरोध पूरा क्यों नहीं हुआ है, तो उसे इकाई में इनकार करने के कारण का वर्णन करना चाहिए। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं करना चाहता है, तो स्थिति कोड 404 (नहीं मिला) इसके बजाय उपयोग किया जा सकता है

दूसरे शब्दों में, यदि ग्राहक प्रमाणीकरण द्वारा संसाधन तक पहुंच प्राप्त कर सकते हैं, तो 401 भेजा जाना चाहिए।




यदि किसी अन्य उपयोगकर्ता के रूप में प्रमाणीकरण अनुरोधित संसाधन तक पहुंच प्रदान करेगा, तो 401 अनधिकृत लौटाया जाना चाहिए। 403 निषिद्ध अधिकतर उपयोग किया जाता है जब संसाधन तक पहुंच हर किसी के लिए प्रतिबंधित होती है या किसी दिए गए नेटवर्क तक सीमित होती है या केवल एसएसएल पर ही अनुमति दी जाती है, जब तक कि यह प्रमाणीकरण से संबंधित न हो।

आरएफसी 7235 से (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP / 1.1): प्रमाणीकरण):

3.1। अनधिकृत 401

401 (अनधिकृत) स्थिति कोड इंगित करता है कि अनुरोध लागू नहीं किया गया है क्योंकि इसमें लक्षित संसाधन के लिए वैध प्रमाणीकरण प्रमाण-पत्रों की कमी है। मूल सर्वर को एक डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण हेडर फ़ील्ड (धारा 4.4) भेजना चाहिए जिसमें लक्ष्य संसाधन पर लागू कम से कम एक चुनौती हो। अगर अनुरोध में प्रमाणीकरण प्रमाण-पत्र शामिल हैं, तो 401 प्रतिक्रिया इंगित करती है कि उन प्रमाण-पत्रों के लिए प्राधिकरण को अस्वीकार कर दिया गया है । ग्राहक अनुरोध को दोहरा सकता है या प्राधिकरण शीर्षलेख फ़ील्ड (धारा 4.1) को प्रतिस्थापित कर सकता है। यदि 401 प्रतिक्रिया में पूर्व प्रतिक्रिया के समान चुनौती है, और उपयोगकर्ता एजेंट ने कम से कम एक बार प्रमाणीकरण का प्रयास किया है, तो उपयोगकर्ता एजेंट को उपयोगकर्ता को संलग्न प्रतिनिधित्व प्रस्तुत करना चाहिए, क्योंकि इसमें आमतौर पर प्रासंगिक नैदानिक ​​जानकारी होती है।

और यह आरएफसी 2616 से है:

10.4.4 403 निषिद्ध

सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है।
प्रमाणीकरण मदद नहीं करेगा और अनुरोध दोहराया नहीं जाना चाहिए।
अगर अनुरोध विधि हेड नहीं थी और सर्वर बनाना चाहता था
जनता क्यों अनुरोध पूरा नहीं हुआ है, इसे इकाई में इनकार करने के कारण का वर्णन करना चाहिए। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं करना चाहता है, तो स्थिति कोड 404
(नहीं मिला) इसके बजाय इस्तेमाल किया जा सकता है।

संपादित करें: आरएफसी 7231 (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP / 1.1): सेमेन्टिक्स और कंटेंट) 403 के अर्थ को बदलता है:

6.5.3। 403 निषिद्ध

403 (निषिद्ध) स्थिति कोड इंगित करता है कि सर्वर अनुरोध को समझ गया लेकिन इसे अधिकृत करने से इंकार कर दिया। एक सर्वर जो सार्वजनिक करना चाहता है कि अनुरोध क्यों मना कर दिया गया है, प्रतिक्रिया पेलोड (यदि कोई हो) में उस कारण का वर्णन कर सकता है।

अगर अनुरोध में प्रमाणीकरण प्रमाण-पत्र प्रदान किए गए थे, तो
सर्वर उन्हें पहुंच प्रदान करने के लिए अपर्याप्त मानता है। ग्राहक
इसके साथ अनुरोध स्वचालित रूप से दोहराना नहीं चाहिए
साख। ग्राहक नए या अलग-अलग प्रमाण-पत्रों के साथ अनुरोध दोहरा सकता है। हालांकि, कारणों से एक अनुरोध प्रतिबंधित किया जा सकता है
प्रमाण पत्र से असंबंधित।

एक मूल सर्वर जो एक के वर्तमान अस्तित्व को "छिपाने" की इच्छा रखता है
निषिद्ध लक्षित संसाधन मई के बजाय स्थिति कोड के साथ प्रतिक्रिया
404 नहीं मिला)।

इस प्रकार, 403 का मतलब अब कुछ भी हो सकता है। नए प्रमाण-पत्र प्रदान करने से मदद मिल सकती है ... या ऐसा नहीं हो सकता है।




इस सवाल को कुछ समय पहले पूछा गया था, लेकिन लोगों की सोच चल रही है।

इस मसौदे में धारा 6.5.3 (फील्डिंग और रेस्केके ​​द्वारा लिखित) स्थिति कोड 403 को आरएफसी 2616 में प्रलेखित एक के लिए थोड़ा अलग अर्थ देता है।

यह दर्शाता है कि कई लोकप्रिय वेब-सर्वर और ढांचे द्वारा नियोजित प्रमाणीकरण और प्राधिकरण योजनाओं में क्या होता है।

मैंने थोड़ा सा जोर दिया है जो मुझे लगता है कि सबसे महत्वपूर्ण है।

6.5.3। 403 निषिद्ध

403 (निषिद्ध) स्थिति कोड इंगित करता है कि सर्वर अनुरोध को समझ गया लेकिन इसे अधिकृत करने से इंकार कर दिया। एक सर्वर जो सार्वजनिक करना चाहता है कि अनुरोध क्यों मना कर दिया गया है, प्रतिक्रिया पेलोड (यदि कोई हो) में उस कारण का वर्णन कर सकता है।

यदि अनुरोध में प्रमाणीकरण प्रमाण-पत्र प्रदान किए गए थे, तो सर्वर उन्हें पहुंच प्रदान करने के लिए अपर्याप्त मानता है। ग्राहक को समान प्रमाण-पत्रों के साथ अनुरोध दोहराना नहीं चाहिए। ग्राहक नए या अलग-अलग प्रमाण-पत्रों के साथ अनुरोध दोहरा सकता है। हालांकि, प्रमाण पत्र से संबंधित कारणों के लिए एक अनुरोध प्रतिबंधित किया जा सकता है।

एक मूल सर्वर जो एक प्रतिबंधित लक्षित संसाधन के वर्तमान अस्तित्व को "छिपाने" की इच्छा रखता है, इसके बजाय 404 (नहीं मिला) के स्टेटस कोड के साथ प्रतिक्रिया दे सकता है।

आप जो भी सम्मेलन का उपयोग करते हैं, महत्वपूर्ण बात यह है कि आपकी साइट / एपीआई में एकरूपता प्रदान करना है।




वे लॉग इन नहीं हैं या उचित उपयोगकर्ता समूह से संबंधित नहीं हैं

आपने दो अलग-अलग मामलों को बताया है; प्रत्येक मामले में एक अलग प्रतिक्रिया होनी चाहिए:

  1. अगर वे बिल्कुल लॉग इन नहीं हैं तो आपको 401 अनधिकृत लौटा देना चाहिए
  2. अगर वे लॉग इन हैं लेकिन उचित उपयोगकर्ता समूह से संबंधित नहीं हैं, तो आपको 403 निषिद्ध वापसी करनी चाहिए

इस उत्तर में प्राप्त टिप्पणियों के आधार पर आरएफसी पर ध्यान दें:

यदि उपयोगकर्ता लॉग इन नहीं है तो वे अनधिकृत हैं, जिनमें से HTTP समकक्ष 401 है और इसे भ्रामक रूप से आरएफसी में अनधिकृत कहा जाता है। 401 अनधिकृत के लिए धारा 10.4.2 राज्यों के रूप में:

"अनुरोध के लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता है ।"

यदि आप अनधिकृत हैं, तो 401 सही प्रतिक्रिया है। हालांकि अगर आप अनधिकृत हैं, अर्थात् सही अर्थ में, 403 सही प्रतिक्रिया है।




यहां कहीं से भी मेरे सिर में यह आसान है, इसलिए:

401: इसे देखने के लिए आपको HTTP मूल लेख की आवश्यकता है।

403: आप इसे नहीं देख सकते हैं, और HTTP मूल लेख मदद नहीं करेगा।

यदि उपयोगकर्ता को साइट के मानक HTML लॉगिन फॉर्म का उपयोग करके लॉग इन करने की आवश्यकता है, तो 401 उचित नहीं होगा क्योंकि यह HTTP मूल लेख के लिए विशिष्ट है।

मैं 403 का उपयोग करने की अनुशंसा नहीं करता हूं जैसे कि /includes चीजों तक पहुंच से इनकार करना, क्योंकि जहां तक ​​वेब का संबंध है, वे संसाधन बिल्कुल मौजूद नहीं हैं और इसलिए 404 होना चाहिए।

यह 403 को "आपको लॉग इन करने की आवश्यकता है" के रूप में छोड़ देता है।

दूसरे शब्दों में, 403 का अर्थ है "इस संसाधन को HTTP मूल लेख के अलावा किसी अन्य प्रकार की लेख की आवश्यकता है"।

https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2




401 बनाम 403 के मामले में, इसका उत्तर कई बार दिया गया है। यह अनिवार्य रूप से 'HTTP अनुरोध पर्यावरण' बहस है, न कि 'एप्लिकेशन' बहस।

रोल-अप-लॉन्च इश्यू (एप्लिकेशन) पर एक सवाल प्रतीत होता है।

इस मामले में, केवल लॉग इन नहीं होने पर 401 या 403 भेजने के लिए पर्याप्त नहीं है, जब तक आप HTTP एथ बनाम लॉगिन पेज (HTTP एथ सेट करने के लिए बंधे नहीं) का उपयोग करते हैं। ऐसा लगता है कि आप एक फ़ाइल में एप्लिकेशन-स्तरीय पहुंच के लिए "201 बनाया गया" ढूंढ रहे हैं, जिसमें रोल-आपकी-लॉगिन-लॉगिन स्क्रीन मौजूद है (अनुरोधित संसाधन की बजाय)। यह कहता है:

"मैंने आपको सुना है, यह यहाँ है, लेकिन इसके बजाय इसे आजमाएं (आपको इसे देखने की अनुमति नहीं है)"






Related