2011-01-03 13 views
27

क्या 201 उत्तर के माध्यम से रीडायरेक्ट करने का कोई तरीका है?201 के साथ रीडायरेक्टिंग

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

मैं नए संसाधन पर रीडायरेक्ट होने के लिए, POST कार्रवाई के बाद उपयोगकर्ता चाहता हूं। इसलिए मैं 303 See Other का उपयोग करने के लिए प्रेरित हूं लेकिन 201 अधिक उपयुक्त लगता है।

तो, क्या उपयोगकर्ता हस्तक्षेप के बिना और जावास्क्रिप्ट पर भरोसा किए बिना लोकप्रिय ब्राउज़रों को स्वचालित रूप से रीडायरेक्ट करने का कोई तरीका है?

उत्तर

18

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

दूसरा क्लाइंट को बता रहा है कि उसने गलत संसाधन यूआरआई को संसाधन के लिए भेजा है - और यह कि फिर से प्रयास करना चाहिए, लेकिन एक अलग यूआरआई के साथ।

एक 303 इस मामले में उचित है - वास्तव में, यह स्पष्ट रूप से इस बात के लिए अनुशंसा की जाती है:

(rfc से)

यह मुख्य रूप से एक पोस्ट कार्रवाई के उत्पादन में अनुमति देने के लिए प्रयोग किया जाता है उपयोगकर्ता एजेंट रीडायरेक्ट करने के लिए एक चयनित संसाधन के लिए, ऐसा करने से, एक अनुरोध में POST प्रतिक्रिया से संबंधित जानकारी प्रदान की जाती है जिसे मूल अनुरोध से स्वतंत्र रूप से पहचाना जा सकता है, बुकमार्क किया जा सकता है, और कैश किया जा सकता है।

+5

"दूसरा ग्राहक को बता रहा है कि उसने अनुरोध किया है कि संसाधन के लिए गलत स्थान यूआरआई भेजा गया है" केवल अनुरोध विधि प्राप्त हुई थी। कभी-कभी किसी संसाधन को पोस्ट करना वैध होता है और यह एक अलग यूआरआई के साथ एक नया उप-संसाधन बना देता है। –

2

आप Refresh शीर्षलेख भेज सकते हैं।

4

ब्राउज़र 3xx स्थिति कोड्स में से एक के माध्यम से एक रीडायरेक्ट कार्रवाई अधिनियमित जाएगा, विनिर्देश को परिभाषित नहीं करता है कि एक उपयोगकर्ता एजेंट एक 201. आप एक ताज़ा हैडर भेजने अगर यह एक बलों को देखने के लिए कोशिश कर सकते के साथ रीडायरेक्ट करना चाहिए Location शीर्षलेख पर रीडायरेक्ट करें, लेकिन मैं उस पर भरोसा नहीं करता। 3xx प्रतिक्रिया के साथ क्यों नहीं चिपकते?

1

मैं पहली बार इस के साथ काम कर रहा हूँ, और यह कि मैं क्या करने का फैसला किया है:

  • GET /user/new ->200 Ok उपयोगकर्ता पंजीकरण फार्म के साथ।
  • POST /user ->201 Created एक नया उपयोगकर्ता, GET /user मार्ग के समान सामग्री के साथ प्रतिक्रिया दें।
  • GET /user -> जो /user/new के लिए लिंक प्रमाणीकृत उपयोगकर्ता के लिए उपयोगकर्ता प्रोफाइल पेज, या, अनाम आगंतुकों के लिए, 307 Temporary Redirect/login करने के लिए, साथ 200 Ok

अद्यतन

मुझे पता चला है कि यह एक बुरा विचार है, क्योंकि अगर उपयोगकर्ता पेज कि POST /user के लिए एक प्रतिक्रिया के रूप में प्रदान किया गया था ताज़ा करता है, वे पद डेटा फिर से भेजें। अगर किसी और के पास एक ही शानदार विचार है तो मैं यहां जवाब छोड़ दूंगा।

+2

उस अद्यतन को छोड़ने के लिए धन्यवाद। मैं एक ही पंक्ति के साथ सोच रहा था, और शायद आपने मुझे काम का एक गुच्छा बचा लिया। – rmeador

संबंधित मुद्दे