HTTP रीडायरेक्ट कोड के बीच अंतर


151

विभिन्न HTTP 3XX रीडायरेक्ट कोड के बीच अंतर मेरे लिए स्पष्ट नहीं हैं। हां, मैंने युक्ति पढ़ी है, लेकिन यहां मानक और वास्तविक अभ्यास के बीच कुछ विसंगति प्रतीत होती है।

301रीडायरेक्ट कोड स्पष्ट पर्याप्त लगता है: यह साधन संसाधन स्थायी रूप से एक और यूआरआई ले जाया गया था, और भविष्य अनुरोध करता है कि यूआरआई का उपयोग करना चाहिए।

और 307रीडायरेक्ट कोड भी स्पष्ट लगता है: इसका मतलब है कि रीडायरेक्ट अस्थायी है, और भविष्य के अनुरोधों को अभी भी मूल यूआरआई का उपयोग करना चाहिए।

लेकिन मैं यह नहीं बता सकता कि क्या अंतर है 302और 303, या उनमें से दोनों वास्तव में अलग क्यों हैं 301। ऐसा लगता है कि 302मूल रूप से एक अस्थायी पुनर्निर्देशित होने का इरादा था , (जैसे 307), लेकिन व्यवहार में, अधिकांश ब्राउज़रों ने इसे एक की तरह व्यवहार किया 303। लेकिन एक 303और एक के बीच अंतर क्या है 301? क्या 301इसका मतलब यह है कि पुनर्निर्देशन अधिक स्थायी है?

जवाबों:


139
  • 301 : स्थायी पुनर्निर्देश। इस संसाधन के लिए बाद में अनुरोध करने वाले ग्राहकों को नए यूआरआई का उपयोग करना चाहिए। POST / PUT / DELETE अनुरोधों के लिए ग्राहकों को स्वचालित रूप से पुनर्निर्देशित नहीं करना चाहिए ।
  • 302 : अपरिभाषित कारण के लिए पुनर्निर्देशित। इस संसाधन के लिए बाद में अनुरोध करने वाले ग्राहकों को नए यूआरआई का उपयोग नहीं करना चाहिए । POST / PUT / DELETE अनुरोधों के लिए ग्राहकों को स्वचालित रूप से पुनर्निर्देशित नहीं करना चाहिए ।
  • 303 : अपरिभाषित कारण के लिए पुनर्निर्देशित। आमतौर पर, 'ऑपरेशन पूरा हो चुका है, कहीं और जारी रखें।' इस संसाधन के लिए बाद में अनुरोध करने वाले ग्राहकों को नए यूआरआई का उपयोग नहीं करना चाहिए । ग्राहकों को POST / PUT / DELETE अनुरोधों के लिए पुनर्निर्देशन का पालन करना चाहिए , लेकिन अनुवर्ती अनुरोध के लिए GET का उपयोग करें
  • 307 : अस्थायी पुनर्निर्देश। संसाधन बाद में इस स्थान पर वापस आ सकते हैं। इस संसाधन के लिए बाद में अनुरोध करने वाले ग्राहकों को पुराने URI का उपयोग करना चाहिए। POST / PUT / DELETE अनुरोधों के लिए ग्राहकों को स्वचालित रूप से पुनर्निर्देशित नहीं करना चाहिए ।

यदि आप पसंद करते हैं तो मैं व्यक्तिगत रूप से 302 से बचने की सलाह देता हूं। जब वे 302 से मुठभेड़ करते हैं, तो कई ग्राहक कल्पना का पालन नहीं करते हैं। अस्थायी पुनर्निर्देश के लिए, आपको या तो 303 या 307 का उपयोग करना चाहिए, यह इस बात पर निर्भर करता है कि आप गैर-जीईटी अनुरोधों पर किस प्रकार का व्यवहार चाहते हैं। जब तक आपको POST / PUT / DELETE पर वैकल्पिक व्यवहार की आवश्यकता न हो, 307 से 303 को प्राथमिकता दें।


26
नहीं। 303 का पालन करने के लिए GET की विधि को फिर से लिखना पड़ता है। दूसरों का पालन करने के लिए विधि की आवश्यकता होती है, लेकिन UA के साथ पुष्टि करने के लिए कि यदि विधि असुरक्षित है (इसलिए विकल्प, HEAD, GET, PROPFIND ... के अलावा अन्य विधियाँ)
जूलियन रेश्के

1
@ JulianReschke क्या आप कृपया अपने बयान का समर्थन करने वाले चश्मे के स्थानों को इंगित कर सकते हैं?
पियोट्र डोब्रोगोस्ट 18

7
@ थोबामैन अपने विवरण में आप मूल HTTP युक्ति ( RFC 1945 ) में की गई वही गलतियाँ कर रहे हैं । उदाहरण के लिए यह कहना कि ग्राहकों को POST / PUT / DELETE अनुरोधों के लिए पुनर्निर्देशित करना चाहिए। 303 के बाद पुनर्निर्देशित किए बिना यह निर्दिष्ट करने के लिए कि http क्रिया को निम्नलिखित अनुरोध में उपयोग किया जाना चाहिए, भ्रामक है ...
Piotr Dobrogost

2
खुद को ठीक करना: "303 के बाद जीईटी के लिए विधि को फिर से लिखना तब तक आवश्यक है जब तक कि प्रारंभिक विधि HEAD नहीं थी"।
जूलियन रेसके ने

2
पायोत्र: डिफ़ॉल्ट को विधि को संशोधित नहीं करना चाहिए ; संसाधन चला गया, जो इसे हेरफेर करने के लिए प्रभावित नहीं करता है। 303 एक अपवाद है; इसका मतलब यह नहीं है कि "संसाधन स्थानांतरित हो गया है" लेकिन "अनुरोध संसाधित किया गया था, और यहां आपका परिणाम है"; यह एक पूरी तरह से अलग तरह का रीडायरेक्ट है। ग्रीनबाइट्स
जूलियन

84

303 और 307 के बीच का अंतर यह है:

303 : अन्य देखें। अनुरोध सही तरीके से प्राप्त हुआ है, लेकिन परिणाम को पुनर्निर्देशित url पर GET का उपयोग करके पुनर्प्राप्त किया जाना चाहिए।

307 : अस्थायी पुनर्निर्देश। पूरे अनुरोध को नए url पर पुनर्निर्देशित किया जाना चाहिए। किसी भी पोस्ट डेटा को फिर से पोस्ट किया जाना चाहिए।

ध्यान दें कि 302 का उद्देश्य 307 का व्यवहार था, लेकिन अधिकांश ब्राउज़रों ने इसे 303 के व्यवहार के रूप में लागू किया (दोनों का अस्तित्व तब तक वापस नहीं था)। इसलिए, 302 को बदलने के लिए उन दो नए कोड पेश किए गए थे।

301 और 303 के बीच का अंतर:

301 : दस्तावेज़ को स्थानांतरित कर दिया गया है। भविष्य के अनुरोधों को नए यूआरएल का उपयोग करना चाहिए। यह url अप्रचलित है।

नोट: इस कोड से सावधान रहें। ब्राउज़रों और परदे के पीछे उस पर वास्तव में आक्रामक कैशिंग लागू होते हैं, इसलिए यदि आप 301 के साथ उत्तर देते हैं तो किसी को उस url को फिर से देखने के लिए एक लंबा समय लग सकता है।

303 : अनुरोध सही ढंग से प्राप्त हुआ है। किसी भी PUT अनुरोध संसाधित किए जाते हैं। जिसके परिणामस्वरूप दस्तावेज़ पुनर्निर्देश url से प्राप्त किया जा सकता है। भविष्य का अनुरोध अभी भी मूल यूआरएल पर जाना चाहिए।


एक अच्छा ब्लॉग पोस्ट जो 3xx (और इसके साथ सभी समस्याओं) के विवरण में जाता है: insanecoding.blogspot.no/2014/02/…
arcuri82

@ skeller88 आपने मेरे उत्तर को गलत बना दिया इसलिए मैंने इसे वापस कर दिया (परिवर्तन स्वीकार करने वाले लोगों के लिए)! आपने वही गलती पेश की जैसा स्वीकृत उत्तर में है। 303 एक अलग तरह का पुनर्निर्देशन है और विभिन्न नियम लागू होते हैं, जैसा कि जूलियन रेस्चके द्वारा स्वीकार किए गए उत्तर पर टिप्पणी द्वारा पुष्टि की गई है और जो ब्लॉग arcuri82 द्वारा लिंक किया गया था
GolezTrol
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.