2008-10-28 14 views
7

मैं एक फ़ाइल डाउनलोड करने के लिए उपयोगकर्ताओं को किसी अन्य सर्वर पर रीडायरेक्ट करने के लिए एक Response.Redirect का उपयोग कर रहा हूं, और दूसरा सर्वर यह सुनिश्चित करने के लिए हेडर की जांच कर रहा है कि यह सही सर्वर से आया है ... हालांकि ऐसा लगता है कि Response.Redirect हेडर को स्ट्रिप करता है प्रतिक्रिया।प्रतिक्रिया। रीडायरेक्ट स्ट्रिप्स हेडर रेफरर - इसे वापस जोड़ना संभव है?

क्या कोई जानता है कि मैं हेडर को वापस कैसे जोड़ सकता हूं? मैंने कोशिश की है:

Response.AddHeader("Referer", "www.domain.com"); 

लेकिन प्राप्तकर्ता पृष्ठ जांच करता है जब मैं जांचता हूं कि रेफरर हेडर सेट है या नहीं।

उपयोगकर्ता द्वारा क्लिक करने के लिए बटन दिखाने के अलावा, मैं यह काम कैसे प्राप्त कर सकता हूं, मैं सुझाव दे सकता हूं (मैं यूआरएल जितना संभव हो सके यूजर को छिपाना चाहता हूं)।

उत्तर

1

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

आप सत्र में रेफरर को सहेजने में सक्षम हो सकते हैं, या इसे क्वेरी पैरामीटर के रूप में यूआरएल में एन्कोड कर सकते हैं। प्रपत्र लॉगिन की तरह ReturnUrl के साथ करता है।

1

Server.Transfer एक विकल्प है?

कुछ चेतावनी हैं हालांकि आपको देखने की आवश्यकता होगी। ईजी मूल यूआरएल, प्रमाणीकरण, आदि रखता है ... लिंक में अधिक जानकारी।

इस यूआरएल में मूल यूआरएल रखना फायदेमंद हो सकता है।

+1

सर्वर। ट्रांसफर केवल एक विकल्प है जब यह एक ही सर्वर पर सही है? इस मामले में, मुझे किसी भिन्न सर्वर पर रीडायरेक्ट करने की आवश्यकता है, इसलिए शायद काम नहीं करेगा :( – Jeeby

+0

सही - उसी सर्वर ... –

+0

आह ठीक है, तो नहीं। – Jeeby

2

रेफरर हैडर कि आपका दूसरा सर्वर ब्राउज़र द्वारा उत्पन्न होता है और यह संभावना नहीं है कि आप इसे किसी भी समझदार तरीके से बदल सकते हैं।

क्या आपने यूआरएल में रेफरर जोड़ने की कोशिश की और फिर इसे अपने दूसरे सर्वर पर पढ़ा?

Response.Redirect("url?Referer=" + Server.UrlEncode(Request.UrlReferrer)); 
0

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

3

कि Referer (sic) हैडर definition के खिलाफ जाना होगा: सर्वर के लाभ के लिए,

Referer [वैसा] अनुरोध हेडर फ़ील्ड ग्राहक निर्दिष्ट करने के लिए अनुमति देता है, पते (URI) संसाधन है जहाँ से अनुरोध- URI प्राप्त हुई थी की ( "रेफ़रलकर्ता", हालांकि हेडर फ़ील्ड गलत लिखा गया है।)

यदि आप इसे पुनर्निर्देशित कर रहे हैं तो यह हेडर जोड़ने का मामला स्पष्ट रूप से नहीं है।

यदि आपको इस जानकारी की आवश्यकता है तो कुकी या कुछ सत्र चर के साथ प्रयास करें, या यूआरएल में बेहतर वैरिएबल जैसा कि आपको पहले से ही बताया गया है।

0

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

+0

क्या होगा यदि उपयोगकर्ता एक साथ दो अनुरोध कर रहा है? पता है, यह होना असंभव है, लेकिन कौन जानता है ... –

+0

यह एक अच्छा सवाल है। मुझे संदेह है कि दूसरा अनुरोध सत्र ["रेफरर"] मान को ओवरराइट करेगा जो मैंने बनाया है, हालांकि मेरा कोड पहले से ही संग्रहीत होगा डीबी टेबल में पहला अनुरोध है, इसलिए मेरे पास अभी भी रिपोर्टिंग उद्देश्यों के लिए है लेकिन इस परिदृश्य में ओवरकिल है। – Lazarus

9

एक HTML हैक उपलब्ध है।

<form action="http://url.goes.here" id="test" method="GET"></form> 
<script type="text/javascript"> 
    document.getElementById("test").submit(); 
</script> 

आप के पीछे एक कोड से कि गति प्रदान करने की जरूरत है, वह भी किया जा सकता है:

Response.Write(@"<form action='http://url.goes.here' id='test' method='GET'></form> 
        <script type='text/javascript'> 
        document.getElementById('test').submit(); 
        </script> "); 

Inkel का कहना है हो सकता है, कि Referer [वैसा] कल्पना का एक ढीला व्याख्या है। यह वही करेगा जो आप चाहते हैं।

+0

हाँ, यह एकमात्र चीज है जो आईई 7 और एफएफ 3 – EMP

+0

दोनों में मेरे लिए काम करती है, आपको अपने सी # – Liam

-2

+1 ऊपर इंकेल की टिप्पणी के लिए +1।

हालांकि यदि आपको spec की परवाह नहीं है और आप इसे अभी भी करना चाहते हैं, तो आप Response.Redirect का उपयोग करने से बच सकते हैं और इसके बजाय प्रतिक्रिया शीर्षलेख स्वयं बना सकते हैं।

Response.StatusCode = 302; //temp redirect 
Response.Headers.Add("Location", "your/url/here"); 
Response.Headers.Add("Referer", "something.com"); 
Response.End(); 

यह मेरे सिर के शीर्ष से बाहर है, आपको प्रतिक्रिया शीर्षलेख में कुछ और चीजें रखने की आवश्यकता हो सकती है।

+1

में '' 'से बचने की आवश्यकता है - 1 'रेफरर' एक अनुरोध हेडर है, प्रतिक्रिया प्रतिक्रिया नहीं है। –

1

यहाँ पिछले का एक संस्करण है कि मेरे लिए काम करता है:

default.asp 

servername = Lcase(Request.ServerVariables("SERVER_NAME")) 
Response.Status = "301 Moved Permanently" 
Response.AddHeader "Location", "http://yoursite" 
Response.AddHeader "Referer", servername 
Response.End() 
0

मैं पोस्ट करने के लिए सुझाव है कि नहीं है - सबसे वेबसाइटों है कि ब्लॉक। बस javascript document.location = '<%:yourURL%>;'; का उपयोग करें जो स्वचालित रूप से नया पृष्ठ लोड करेगा। यह मेरे लिए अच्छा काम कर रहा है - क्योंकि रीडायरेक्ट प्रतिक्रिया में रेफरर शामिल नहीं है।

1

मुझे पता है कि यह पुराना है, लेकिन मैं ऐसा ही करने की कोशिश करते समय बस आया था।

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

string token = vwrApi.GetAuthenticationToken(userId); 
Response.Cookies.Add(new HttpCookie("VwrAuthorization", token)); 
Response.Redirect(returnUrl, true); 

बेशक इस जहां गंतव्य सर्वर जानकारी के लिए लग रहा है बदलने के लिए अपनी क्षमता पर निर्भर है, लेकिन यह कम से कम एक और विकल्प है।

-1

आपको 307 स्थिति प्रतिक्रिया जारी करने और उस स्थान पर स्थान शीर्षलेख सेट करने की आवश्यकता होगी, जिसे आप उपयोगकर्ता को रीडायरेक्ट करना चाहते हैं। यह मूल रेफरर [एसआईसी] हेडर बरकरार रखेगा।

HttpContext.Current.Response.StatusCode = 307; 
HttpContext.Current.Response.AddHeader("Location", "http://stackoverflow.com"); 
HttpContext.Current.Response.End(); 
+1

यह इस सवाल से मेल नहीं खाता है।पुनर्निर्देशित अनुरोध में अपेक्षित रेफरर स्ट्रिंग नहीं है (हालांकि आपने कहा था)। – Marcel

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