jsp क्या 302 रीडायरेक्ट रेफरर स्ट्रिंग को बनाए रखेगा?




redirect referrer (3)

मुझे उपयोगकर्ता को एक पृष्ठ से दूसरे पृष्ठ पर रीडायरेक्ट करने की आवश्यकता है, लेकिन मुझे मूल रेफरर स्ट्रिंग को बनाए रखने की आवश्यकता है। इसलिए, उदाहरण के लिए, यदि वे http://www.othersite.com/pageA.jsp पर शुरू होते हैं, तो उन्हें एक लिंक पर क्लिक करें जो उन्हें http://www.mysite.com/pageB.jsp ले जाता है, जो तब 302 निष्पादित करता है http://www.mysite.com/pageC.jsp रीडायरेक्ट http://www.mysite.com/pageC.jsp , मुझे " http://www.othersite.com/pageA.jsp " रखने के लिए रेफरर स्ट्रिंग की आवश्यकता है

क्या यह 302 रीडायरेक्ट के लिए सामान्य व्यवहार है? या " http://www.mysite.com/pageB.jsp " के पक्ष में, मेरा मूल रेफरर गिरा दिया जाएगा? वह वांछनीय नहीं होगा।

मुझे नहीं पता कि इससे कोई फर्क पड़ता है, लेकिन मैं जेएसपी में काम कर रहा हूं, और मैं 302 रीडायरेक्ट को निष्पादित करने के लिए respond.sendRedirect () का उपयोग कर रहा हूं।

मुझे जिक्र करना चाहिए कि मैंने इसके साथ एक प्रयोग किया है, और ऐसा लगता है कि मूल रेफरर स्ट्रिंग (" http://www.othersite.com/pageA.jsp ") रखा गया है, लेकिन मैं बस यह सुनिश्चित करना चाहता था कि यह सामान्य डिफ़ॉल्ट था व्यवहार, और मेरे अंत में कुछ अजीब नहीं है।

आपके सहयोग के लिए धन्यवाद।

जोड़ने के लिए संपादित किया गया:

हालांकि मैं वर्तमान में 302 रीडायरेक्ट का उपयोग कर रहा हूं, मैं शायद इसके बजाय 301 रीडायरेक्ट का उपयोग कर सकता हूं। क्या आप जानते हैं कि 301 रीडायरेक्ट के लिए व्यवहार और अधिक विश्वसनीय है या नहीं?

https://code.i-harness.com


अच्छा प्रश्न। इस मामले में, रेफरर भेजना पूरी तरह से ब्राउज़र पर निर्भर करता है (क्योंकि ब्राउज़र को नए संसाधन के लिए एक और अनुरोध करने के लिए कहा जाता है)।

आरएफसी 2616 इस मुद्दे के बारे में चुप रहती है:

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

मैं ब्राउजर पर सही रेफरर भेजने के लिए भरोसा नहीं करता। मुझे यकीन है कि कम से कम एक है जो दूसरों की तुलना में कुछ अलग भेजता है।

वैकल्पिक हल

यदि आप कर सकते हैं, तो आप जिस URL को रीडायरेक्ट करते हैं उस पर एक ?override_referer=<old_url> पैरामीटर क्यों नहीं जोड़ते हैं, और HTTP_REFERER के बजाय उस मान को पार्स करें।

इस तरह आप हमेशा सही परिणाम प्राप्त करना सुनिश्चित कर सकते हैं, और आप सुरक्षा में कुछ खो नहीं रहे हैं: रेफरर को किसी भी तरह से फिक्र किया जा सकता है।


मुझे 302 के बारे में पता नहीं है, लेकिन मैंने आज कुछ ब्राउज़रों पर 301 का परीक्षण किया, परिणाम यहां:

SCENARIO : डोमेनएक्स पर उपयोगकर्ता क्लिक लिंक जो डोमेन ए को इंगित करता है। डोमेनए डोमेन 3 पर एक 301 रीडायरेक्ट करता है।

  • डोमेन बी पर लैंडिंग करते समय आईई 8 रेफरर: डोमेनएक्स (यहां तक ​​कि इनप्रिवेट ब्राउजिंग का उपयोग करते समय और जब भी उपयोगकर्ता नए टैब में लिंक खोलता है)
  • डोमेनबी पर लैंडिंग करते समय सफारी 4 रेफरर है: डोमेनएक्स (यहां तक ​​कि जब उपयोगकर्ता नए टैब में लिंक खोलता है)
  • डोमेनबी पर लैंडिंग करते समय FF3.6.10 रेफरर है: डोमेनएक्स (यहां तक ​​कि जब उपयोगकर्ता नए टैब में लिंक खोलता है)
  • डोमेन बी पर लैंडिंग करते समय क्रोम 5 रेफरर है: डोमेनएक्स ( जब तक कि उपयोगकर्ता नए टैब में लिंक नहीं खोलता)
  • डोमेनबी पर लैंडिंग करते समय क्रोम 26 रेफरर है: डोमेनएक्स (यहां तक ​​कि जब उपयोगकर्ता नए टैब में लिंक खोलता है)

संक्षिप्त उत्तर यह रेफरर हेडर या 302 स्टेटस कोड के लिए संबंधित आरएफसी 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 या तो निर्दिष्ट नहीं है।

आपकी सबसे अच्छी शर्त कई ब्राउज़रों के साथ एक परीक्षण करना है और देखें कि सर्वसम्मति व्यवहार है या नहीं।

पूर्ण बेल्ट और ब्रेसिज़ के लिए, रीडायरेक्ट यूआरएल में मूल रेफरर को एन्कोड करें ताकि आप इसे पुनः प्राप्त करने की गारंटी दे सकें।





http-referer