HTTP पुनर्निर्देशित: 301 (स्थायी) बनाम 302 (अस्थायी)


381

क्या क्लाइंट को अलग तरह से व्यवहार करना चाहिए? कैसे?


RFC 2616 - HTTP स्थिति कोड मैं वहां सब कुछ दोहरा सकता था, लेकिन यह काफी स्पष्ट रूप से बताता है;)
10

2
यह ध्यान देने योग्य बात है कि अधिक बारीक अस्थायी पुनर्निर्देश के लिए भी 303 और 307 स्थिति कोड प्रदान करता है।
पैट्रिक मैक्लेनी

303 और 307 की अब वास्तव में जरूरत नहीं है। 303 को यह निर्दिष्ट करना था कि नया URL संबंधित है, लेकिन समकक्ष नहीं है, और वर्तमान अनुरोध POST होने पर भी GET के साथ लोड किया जाना चाहिए, लेकिन ब्राउज़र वैसे भी 302 के साथ ऐसा करते हैं। 307 को स्पष्ट रूप से निर्दिष्ट करना चाहिए था कि पुनर्निर्देशित 302 के विपरीत अस्थायी है जो निर्दिष्ट नहीं करता था कि यह अस्थायी था, लेकिन ब्राउज़र और क्रॉलर वैसे भी 302 को अस्थायी मानते हैं।
thomasrutter

जवाबों:


569

स्थिति 301 का अर्थ है कि संसाधन (पृष्ठ) को स्थायी रूप से एक नए स्थान पर ले जाया जाता है। क्लाइंट / ब्राउज़र को मूल स्थान का अनुरोध करने का प्रयास नहीं करना चाहिए लेकिन अब से नए स्थान का उपयोग करना चाहिए।

स्थिति 302 का मतलब है कि संसाधन अस्थायी रूप से कहीं और स्थित है, और क्लाइंट / ब्राउज़र को मूल यूआरएल का अनुरोध जारी रखना चाहिए।


12
धन्यवाद। क्या इसका मतलब यह है कि यदि मैं 301 (स्थायी) पुनर्निर्देशन का उपयोग करता हूं, तो ग्राहक पुराने स्थान को फिर से प्राप्त करने का निर्णय नहीं ले सकता है और इसके बजाय हमेशा सीधे नए URL का उपयोग करता है?
फ्लाईबिसवायर

18
बिल्कुल सही! वास्तव में, स्पेक्स के अनुसार, ग्राहक SHOULD हमेशा नए स्थान पर जाता है।
फिलिप लेबेर्ट

7
लेकिन एक ब्राउज़र में, यह कैसे प्रभावित करता है? उदाहरण के लिए बैक बटन में इतिहास को फिर से लिखना, 301 में गलत एक पर वापस जाने से बचने के लिए? यदि आप किसी पुराने में क्लिक करते हैं, तो 301 पर एक बुकमार्क को चुपचाप बदल दें?
ज़ावी मोंटेरो

9
@XaviMontero अधिकांश आधुनिक ब्राउज़र 301s कैश करते हैं और 6 महीने तक मूल स्रोत का अनुरोध करने पर परेशान नहीं करेंगे
जॉन

34
ट्रिक को याद रखने के लिए ट्रिक HTTP स्टेटस कोड 301-> पर्म और 302-> टेंप रिडायरेक्ट टू की शुरुआत T से होती है, जैसे ही अस्थाई T से शुरू होती है
ScottCate

108

जब कोई सर्च इंजन स्पाइडर किसी वेबपेज के रिस्पांस हेडर में 301 स्टेटस कोड पाता है, तो यह समझता है कि यह वेबपेज अब मौजूद नहीं है, यह प्रतिक्रिया के लिए लोकेशन हेडर की खोज करता है और नए URL को चुनता है और इंडेक्स किए गए URL को नए के साथ बदलता है और पेजरेंक भी ट्रांसफर करता है। ।

इसलिए खोज इंजन सभी अनुक्रमित URL को रीफ़्रेश करता है जो अब नए URL के साथ मौजूद नहीं है (301 पाया गया), यह आपके पुराने वेबपेज ट्रैफ़िक को बनाए रखेगा, पेजरेंक और इसे नए पर डायवर्ट करेगा (आप पुराने वेबपेज का ट्रैफ़िक नहीं खोएंगे)।

ब्राउज़र: यदि कोई ब्राउज़र 301 स्थिति कोड पाता है, तो वह नए URL के साथ पुराने URL की मैपिंग को कैश करता है, क्लाइंट / ब्राउज़र मूल स्थान का अनुरोध करने का प्रयास नहीं करेगा, लेकिन जब तक कैश साफ़ नहीं किया जाता है तब से नए स्थान का उपयोग करें।

यहां छवि विवरण दर्ज करें

जब एक खोज इंजन मकड़ी एक वेबपेज के लिए 302 स्थिति पाता है, तो यह केवल नए स्थान पर अस्थायी रूप से पुनर्निर्देशित करेगा और दोनों पृष्ठों को क्रॉल करेगा। पुराना वेबपेज URL अभी भी खोज इंजन डेटाबेस में मौजूद है और यह हमेशा पुराने स्थान का अनुरोध करने और इसे क्रॉल करने का प्रयास करता है। क्लाइंट / ब्राउज़र अभी भी मूल स्थान का अनुरोध करने का प्रयास करेगा।

यहां छवि विवरण दर्ज करें

इसके बारे में और अधिक पढ़ें कि इसे asp.net c # में कैसे लागू किया जाए और सर्च इंजन पर इसका क्या प्रभाव है - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

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

देखें पीटर ली की जवाब अधिक जानकारी के लिए।


20

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

302 यह है कि अनुरोधित संसाधन अस्थायी रूप से एक अलग URI के तहत रहता है।

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

यदि कैश-कंट्रोल या समाप्ति शीर्ष लेख फ़ील्ड द्वारा इंगित किया गया है तो यह प्रतिक्रिया केवल कैश करने योग्य है।


1
तो 301 समझ में आता है, लेकिन मैं 302 के लिए एक अच्छा उदाहरण उपयोग के साथ आने वाला एक कठिन समय हूं ।
बॉब स्टीन

4
@ BobStein-VisiBone 302 रीडायरेक्ट का उदाहरण के लिए: एक फ़ाइल कोड के साथ old.php बनाने <?php header("location: http://example.com/new.php"); ?>और फ़ाइल new.php - <?php echo 'I am new'; ?>और करने के लिए जाना लिंक । "मैं नया हूं" पाठ को रीडायरेक्ट और प्रदर्शित करेगा। फिर कोड को old.php में बदलें <?php echo 'I am old'; ?>और लिंक पर भी जाएं । आप "मैं बूढ़ा हो गया" पाठ देखूंगा। यदि आपने 301. को पुराने में रीडायरेक्ट किया है। तो आपने पुराने "एफपीपी के कोड में परिवर्तन के बाद भी" मैं नया हूँ "पाठ देखा होगा।
प्रेरितों

2
@ BobStein-VisiBone मेरे पास एक ऐसा पृष्ठ है जिसे अपदस्थ किया गया है और दिखाया नहीं जा सकता है। हमें एक नया पृष्ठ बनाने की आवश्यकता है, लेकिन कुछ समय के लिए तैयार नहीं होगा। हम किसी मौजूदा पृष्ठ पर एक अस्थायी पुन: प्रत्यक्ष का उपयोग करते हैं जो हमें आगंतुकों के लिए उपयोगी है। नया पेज बन जाने के बाद, हम उसके बाद एक स्थायी रीडायरेक्ट का उपयोग करेंगे।
एडीसी

4
यदि आपका गंतव्य URL राज्य पर निर्भर करता है, तो 302 उपयोगी है।
ब्रायन

7
अब मुझे कुछ समय हो गया है लेकिन यहाँ एक अच्छा उदाहरण है। वेबकॉमिक्स में आमतौर पर एक यूआरएल होता है जो नवीनतम कॉमिक की ओर ले जाता है। यदि वह है webcomic.com/latestऔर webcomic.com/some-comic-title301 के साथ पुनर्निर्देश करता है तो ब्राउज़र हमेशा "कुछ-कॉमिक-शीर्षक" पर पुनर्निर्देशित करेगा। यहां तक ​​कि जब अगला कॉमिक प्रकाशित हुआ है और "नवीनतम" अब "एक और कॉमिक-शीर्षक" पर पुनर्निर्देशित करता है ... यह वह जगह है जहां 302 बेहतर होगा।
हसन

17

301 रीडायरेक्ट को अनिश्चित काल के लिए कैश किया जाता है (कम से कम कुछ ब्राउज़रों द्वारा)।

इसका मतलब है, यदि आप 301 सेट करते हैं, तो उस पृष्ठ पर जाएं, आप न केवल पुनर्निर्देशित हो जाते हैं, बल्कि यह पुनर्निर्देशन भी कैश हो जाता है।

जब आप फिर से उस पृष्ठ पर जाते हैं, तो आपका ब्राउज़र * उस URL का अनुरोध करने की जहमत नहीं उठाता है, यह सिर्फ कैश्ड पुनर्निर्देशन लक्ष्य पर जाता है।

कैश में उस पुनर्निर्देशन के साथ एक आगंतुक के लिए 301 पूर्ववत करने का एकमात्र तरीका मूल URL पर फिर से पुनर्निर्देशन है। उस स्थिति में, ब्राउज़र लूप को नोटिस करेगा, और अंत में वास्तव में दर्ज URL का अनुरोध करेगा।

जाहिर है, यह एक विकल्प नहीं है यदि आपने फेसबुक या किसी अन्य संसाधन को 301 करने का फैसला किया है जो आप पूरी तरह से नियंत्रण में नहीं हैं।

दुर्भाग्य से, कई होस्टिंग प्रदाता अपने व्यवस्थापक इंटरफ़ेस में एक सुविधा प्रदान करते हैं जिसे केवल "पुनर्निर्देशन" कहा जाता है, जो 301 पुनर्निर्देशित करता है। यदि आप इसे अपने डोमेन को अस्थायी रूप से जल्द ही आने वाले पृष्ठ के रूप में फेसबुक पर पुनर्निर्देशित कर रहे हैं, तो आप मूल रूप से खराब हो गए हैं।

* कम से कम क्रोम और फ़ायरफ़ॉक्स, कितनी देर तक ब्राउज़रों को HTTP 301s कैश करते हैं? । बस इसे क्रोम 45 के साथ आज़माया। संपादित करें: मैक पर सफारी 7.0.6 भी कैश करता है, एक ब्राउज़र रीस्टार्ट ने मदद नहीं की (लिंक का कहना है कि विंडोज पर सफारी 5 पर यह मदद करता है।)

** मैंने जावास्क्रिप्ट की कोशिश की window.location = '', क्योंकि यह समाधान होगा जो कि ज्यादातर मामलों में लागू किया जा सकता है - यह काम नहीं करता है। इसका परिणाम एक अनिर्दिष्ट अनंत लूप में होता है। हालाँकि, php header('Location: new.url')लूप को तोड़ता है

नीचे पंक्ति: केवल 301 का उपयोग करें यदि आप पूरी तरह से सुनिश्चित हैं कि आप उस URL का फिर से उपयोग नहीं करने जा रहे हैं। आमतौर पर रूट dir पर कभी नहीं (example.com/)


7

301 के साथ मुख्य मुद्दा ब्राउज़र है जो सर्वर स्तर से पुनर्निर्देशन को अक्षम करने पर भी पुनर्निर्देशन को कैश करेगा।

यदि आप लघु रखरखाव विंडो के लिए पुनर्निर्देशन को सक्षम कर रहे हैं तो इसका हमेशा 302 उपयोग करना बेहतर होगा।


यह निश्चित रूप से एक "मुद्दा" नहीं है; यह सिर्फ यह है कि यह कैसे काम करना है। HTTP को HTTPS पर पुनर्निर्देशित करना, वेबसाइट को नए सिरे से परित्यक्त करना, इत्यादि, 301 के सामान्य उपयोगों में से कुछ हैं।
होसीएनजेएफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.