बीच क्या अंतर है Server.Transfer
और Response.Redirect
?
- प्रत्येक के फायदे और नुकसान क्या हैं?
- एक दूसरे पर कब उचित है?
- जब कोई उचित नहीं है?
Server.TransferRequest
इसके बजाय का उपयोग करने पर विचार कर सकते हैं Server.Transfer
।
बीच क्या अंतर है Server.Transfer
और Response.Redirect
?
Server.TransferRequest
इसके बजाय का उपयोग करने पर विचार कर सकते हैं Server.Transfer
।
जवाबों:
Response.Redirect
बस नीचे एक संदेश (HTTP 302) ब्राउज़र को भेजता है।
Server.Transfer
ब्राउज़र को कुछ भी जाने बिना होता है, ब्राउज़र एक पेज का अनुरोध करता है, लेकिन सर्वर दूसरे की सामग्री को वापस करता है।
Response.Redirect()
आपको एक नए पेज पर भेजेगा, एड्रेस बार को अपडेट करेगा और ब्राउज़र हिस्ट्री में जोड़ेगा। अपने ब्राउज़र पर आप वापस क्लिक कर सकते हैं।
Server.Transfer()
पता बार नहीं बदलता है। तुम पीछे नहीं हट सकते।
मैं उपयोग करता हूं Server.Transfer()
जब मैं नहीं चाहता कि उपयोगकर्ता यह देखे कि मैं कहां जा रहा हूं। कभी-कभी "लोडिंग" प्रकार पृष्ठ पर।
अन्यथा मैं हमेशा उपयोग करूंगा Response.Redirect()
।
संक्षिप्त होने के लिए: Response.Redirect
बस ब्राउज़र को दूसरे पृष्ठ पर जाने के लिए कहता है। Server.Transfer
सर्वर अनुरोधों को कम करने में मदद करता है, URL को समान रखता है और थोड़ी बग-बशिंग के साथ, आपको क्वेरी स्ट्रिंग को स्थानांतरित करने और चर बनाने की अनुमति देता है।
मुझे कुछ मिला और ( स्रोत ) से सहमत हूँ :
Server.Transfer
इसमें समान है कि यह उपयोगकर्ता को दूसरे पृष्ठ पर इस तरह के बयान के साथ भेजता हैServer.Transfer("WebForm2.aspx")
। हालांकि, बयान के कई अलग-अलग फायदे और नुकसान हैं।सबसे पहले,
Server.Transfer
सर्वर संसाधनों का उपयोग करके दूसरे पृष्ठ पर स्थानांतरित करना । ब्राउज़र को रीडायरेक्ट बताने के बजाय, यह वेब सर्वर पर "फ़ोकस" को बदल देता है और अनुरोध को स्थानांतरित करता है। इसका मतलब है कि आप बहुत से HTTP अनुरोधों के माध्यम से नहीं आते हैं, जिससे आपके वेब सर्वर पर दबाव कम होता है और आपके एप्लिकेशन तेजी से चलते हैं।लेकिन ध्यान रखें: क्योंकि "स्थानांतरण" प्रक्रिया केवल उन साइटों पर काम कर सकती है जो सर्वर पर चल रहे हैं; आप
Server.Transfer
उपयोगकर्ता को किसी बाहरी साइट पर भेजने के लिए उपयोग नहीं कर सकते । केवल वहीResponse.Redirect
कर सकता है।दूसरे,
Server.Transfer
ब्राउज़र में मूल URL को बनाए रखता है। यह वास्तव में डेटा प्रविष्टि तकनीकों को सुव्यवस्थित करने में मदद कर सकता है, हालांकि यह डिबगिंग के दौरान भ्रम की स्थिति पैदा कर सकता है।यह सब नहीं है: इस
Server.Transfer
विधि का एक दूसरा पैरामीटर भी है- "प्रिजर्वफ़ॉर्म"। यदि आप इसेTrue
ऐसे स्टेटमेंट का उपयोग करके सेट करते हैं , जैसेServer.Transfer("WebForm2.aspx", True)
मौजूदा क्वेरी स्ट्रिंग और किसी भी प्रकार के चर अभी भी आपके द्वारा स्थानांतरित किए जा रहे पेज पर उपलब्ध होंगे।उदाहरण के लिए, यदि आपके WebForm1.aspx में TextBox1 नामक एक TextBox नियंत्रण है और आपने TrueF के लिए निर्धारित परिरक्षण पैरामीटर के साथ WebForm2.aspx पर स्थानांतरित किया है, तो आप संदर्भ द्वारा मूल पृष्ठ टेक्स्ट कंट्रोल का मान पुनः प्राप्त कर पाएंगे
Request.Form("TextBox1")
।
maintaining the original URL... ...really help streamline data entry techniques
?
Response.Redirect()
जब इस्तेमाल किया जाना चाहिए:
Server.Transfer()
जब इस्तेमाल किया जाना चाहिए:
पहले पेज के ग्राहक के आने के बाद प्रतिक्रिया। रीडायरेक्ट पेज को दूसरे पेज पर रीडायरेक्ट करता है। तो ग्राहक पुनर्निर्देशन जानता है।
Server.Transfer पृष्ठ के वर्तमान निष्पादन को समाप्त करता है। ग्राहक पुनर्निर्देशन नहीं जानता है। यह आपको क्वेरी स्ट्रिंग को स्थानांतरित करने और चर बनाने की अनुमति देता है।
इसलिए यह आपकी आवश्यकताओं पर निर्भर करता है कि कौन सा बेहतर है।
Response.Redirect
मूल पेज को लोड करने के लिए बायपास कर सकता है, भले ही मैंने कॉल किया हो Response.Redirect
?
"response.redirect" और "server.transfer" पृष्ठ को निष्पादित करते समय उपयोगकर्ता को एक पृष्ठ से दूसरे पृष्ठ पर स्थानांतरित करने में मदद करता है। लेकिन जिस तरह से वे इस स्थानांतरण / पुनर्निर्देशन को करते हैं वह बहुत अलग है।
यदि आप दृश्य व्यक्ति हैं और सिद्धांत के बजाय प्रदर्शन देखना चाहते हैं, तो मैं नीचे दिए गए फेसबुक वीडियो को देखने का सुझाव दूंगा जो कि अधिक प्रदर्शनकारी तरीके से अंतर को बताता है।
https://www.facebook.com/photo.php?v=762186150488997
उनके बीच मुख्य अंतर यह है कि स्थानांतरण कौन करता है। "Response.redirect" में ब्राउज़र द्वारा ट्रांसफर किया जाता है जबकि "server.transfer" में यह सर्वर द्वारा किया जाता है। आइए इस कथन को और अधिक विस्तार से समझने की कोशिश करते हैं।
"Server.Transfer" में निम्नलिखित है कि कैसे स्थानांतरण होता है: -
1. उपयोगकर्ता ASP.NET पृष्ठ पर एक अनुरोध भेजता है। नीचे दिए गए आंकड़े में "WebForm1" पर अनुरोध भेजा गया है और हम "Webform2" पर नेविगेट करना चाहेंगे।
2.Server "Webform1" को निष्पादित करना शुरू कर देता है और पृष्ठ का जीवन चक्र शुरू होता है। लेकिन पेज का पूरा जीवन चक्र पूरा होने से पहले "Server.transfer" "WebForm2" पर होता है।
3. "वेबफॉर्म 2" पृष्ठ ऑब्जेक्ट बनाया गया है, पूर्ण पृष्ठ जीवन चक्र निष्पादित किया जाता है और आउटपुट HTML प्रतिक्रिया तब ब्राउज़र को भेजी जाती है।
जबकि "Response.Redirect" में नेविगेशन के लिए घटनाओं का क्रम है: -
1.Client (ब्राउज़र) एक पेज पर एक अनुरोध भेजता है। नीचे दिए गए आंकड़े में "WebForm1" पर अनुरोध भेजा गया है और हम "Webform2" पर नेविगेट करना चाहेंगे।
2. "वेबफॉर्म 1" का लाइफ़ साइकल निष्पादित होने लगता है। लेकिन जीवन चक्र के बीच में "Response.Redirect" होता है।
3.अब सर्वर रीडायरेक्ट करने के बजाय, वह ब्राउज़र को HTTP 302 कमांड भेजता है। यह कमांड ब्राउज़र को बताता है कि उसे "Webform2.aspx" पेज पर GET अनुरोध शुरू करना है।
4.Browser 302 कमांड की व्याख्या करता है और "Webform2.aspx" के लिए GET अनुरोध भेजता है।
दूसरे शब्दों में "Server.Transfer" को सर्वर द्वारा निष्पादित किया जाता है जबकि "Response.Redirect" को थ्रू ब्राउज़र द्वारा निष्पादित किया जाता है। पेज का रीडायरेक्ट करने के लिए "Response.Redirect" को दो अनुरोधों की आवश्यकता होती है।
तो कब "Server.Transfer" का उपयोग करें और कब "Response.Redirect" का उपयोग करें?
"Server.Transfer" का उपयोग करें जब आप उन पृष्ठों को नेविगेट करना चाहते हैं जो एक ही सर्वर पर रहते हैं, तो "Response.Redirect" का उपयोग करें जब आप उन पृष्ठों के बीच नेविगेट करना चाहते हैं जो विभिन्न सर्वर और डोमेन पर रहते हैं।
नीचे एक सारांश तालिका दी गई है, जिसमें मतभेदों का वर्णन किया गया है और किस परिदृश्य में उपयोग किया जाना है।
Server.Transfer
: एक ही सर्वर या एक ही IIS वेब साइट ?
Server.Transfer की सुंदरता आप इसके साथ क्या कर सकते हैं:
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
जब तक आप Server.Transfer का उपयोग नहीं करते हैं, तब तक आप अपने पिछले पृष्ठ से कुछ भी प्राप्त कर सकते हैं
स्कारलेटगार्डन की टिप्पणी के अलावा, आपको खोज इंजन और आपके पुनर्निर्देशन के प्रभाव पर भी विचार करना होगा। क्या यह पृष्ठ स्थायी रूप से चला गया है? अस्थायी रूप से? इससे फर्क पड़ता है।
देखें: प्रतिक्रिया। अप्रत्यक्ष बनाम "301 स्थानांतरित स्थायी रूप से" :
हम सभी ने एक समय या किसी अन्य पर Response.Redirect का उपयोग किया है। यह आगंतुकों को सही दिशा में इंगित करने का त्वरित और आसान तरीका है यदि वे किसी तरह गलत स्थान पर समाप्त होते हैं। लेकिन क्या आप जानते हैं कि जब आप वास्तव में "301 मूव्ड परमानेंटली" भेजना चाहते हैं, तो Response.Redirect "302 Found" का HTTP प्रतिक्रिया स्थिति कोड भेजता है?
भेद छोटा लगता है, लेकिन कुछ मामलों में यह वास्तव में एक बड़ा बदलाव ला सकता है। उदाहरण के लिए, यदि आप "301 मूव्ड परमानेंटली" रिस्पांस कोड का उपयोग करते हैं, तो अधिकांश सर्च इंजन अपने इंडेक्स से पुराने लिंक को हटा देंगे और इसे नए के साथ बदल देंगे। यदि आप "302 मिला" का उपयोग करते हैं, तो वे पुराने पृष्ठ पर वापस आते रहेंगे ...
स्थानांतरण पूरी तरह से सर्वर-साइड है। क्लाइंट पता बार स्थिर रहता है। अनुरोधों के बीच संदर्भ के हस्तांतरण के बारे में कुछ जटिलता। फ़्लशिंग और पुनः आरंभ करना पृष्ठ संचालकों को महंगा पड़ सकता है, इसलिए अपना स्थानांतरण आरंभिक में करें जैसे कि HttpModule में BeginRequest के दौरान। MSDN डॉक्स को ध्यान से पढ़ें, और HttpContext.Request के नए मूल्यों को परखें और समझें - विशेष रूप से पोस्टबैक परिदृश्यों में। हम आमतौर पर त्रुटि परिदृश्यों के लिए Server.Transfer का उपयोग करते हैं।
रिडायरेक्ट 302 स्टेटस और क्लाइंट-साइड राउंडट्रिप रिक्वेस्ट के साथ रिक्वेस्ट को समाप्त कर देता है और आंतरिक रूप से एक अपवाद (मामूली सर्वर परफेक्ट हिट) को खा जाता है - यह निर्भर करता है कि आप एक दिन में कितने काम करते हैं) क्लाइंट फिर नए पते पर नेविगेट करता है। ब्राउज़र पता बार और इतिहास अपडेट आदि। ग्राहक एक अतिरिक्त राउंडट्रिप की लागत का भुगतान करता है - लागत विलंबता के आधार पर भिन्न होती है। हमारे व्यवसाय में हम बहुत कुछ पुनर्निर्देशित करते हैं हमने अपवाद लागत से बचने के लिए अपना मॉड्यूल लिखा था।
ऊपर बताए अनुसार कई अंतर हैं। इन सबके अलावा, एक और अंतर है। Response.Redirect()
किसी भी पृष्ठ पर उपयोगकर्ता को पुनर्निर्देशित करने के लिए उपयोग किया जा सकता है जो अनुप्रयोग का हिस्सा नहीं है, लेकिन Server.Transfer()
इसका उपयोग केवल अनुप्रयोग के भीतर उपयोगकर्ता को पुनर्निर्देशित करने के लिए किया जा सकता है।
//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");
Response.Redirect अधिक महंगा है क्योंकि यह सर्वर के लिए एक अतिरिक्त यात्रा जोड़ता है यह जानने के लिए कि कहां जाना है।
Server.Transfer अधिक कुशल है, हालांकि यह उपयोगकर्ता के लिए थोड़ा गलत हो सकता है क्योंकि Url शारीरिक रूप से परिवर्तित नहीं होता है।
मेरे अनुभव में, प्रदर्शन का अंतर बाद के दृष्टिकोण का उपयोग करने के लिए पर्याप्त महत्वपूर्ण नहीं है
Server.Transfer क्लाइंट ब्राउज़र में URL नहीं बदलता है, इसलिए प्रभावी रूप से ब्राउज़र को नहीं पता है कि आप किसी अन्य सर्वर-साइड हैंडलर में बदल गए हैं। Response.Redirect ब्राउज़र को किसी भिन्न पृष्ठ पर जाने के लिए कहता है, इसलिए शीर्षक में url बदलता है।
Server.Transfer थोड़ा तेज़ है क्योंकि यह सर्वर के लिए एक राउंडट्रिप से बचता है, लेकिन url का गैर-परिवर्तन आपके लिए अच्छा या बुरा हो सकता है, यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।
प्रतिक्रिया। रीडायरेक्ट: ब्राउज़र को बताता है कि अनुरोधित पृष्ठ एक नए स्थान पर पाया जा सकता है। ब्राउज़र फिर नए पेज को ब्राउज़र में अपनी सामग्री लोड करने के लिए एक और अनुरोध शुरू करता है। इसके परिणामस्वरूप ब्राउज़र द्वारा दो अनुरोध किए जाते हैं।
Server.Transfer: यह सर्वर पर पहले पेज से दूसरे पेज पर निष्पादन ट्रांसफर करता है। जहाँ तक ब्राउज़र क्लाइंट का सवाल है, इसने एक अनुरोध किया और प्रारंभिक पृष्ठ वह है जो सामग्री के साथ प्रतिक्रिया दे रहा है। इस दृष्टिकोण का लाभ क्लाइंट ब्राउज़र से सर्वर पर एक कम गोल यात्रा है। इसके अलावा, किसी भी पोस्ट किए गए फॉर्म चर और क्वेरी स्ट्रिंग पैरामीटर दूसरे पेज पर भी उपलब्ध हैं।
स्थानांतरण के बारे में अधिक जानकारी (), यह वास्तव में Server.Execute () + Response.End () है, इसका स्रोत कोड नीचे है (मोनो / .net 4.0 से):
public void Transfer (string path, bool preserveForm)
{
this.Execute (path, null, preserveForm, true);
this.context.Response.End ();
}
और Execute के लिए (), इसे चलाने के लिए क्या दिया गया मार्ग का हैंडलर है, देखें
ASP.NET यह सत्यापित नहीं करता है कि मौजूदा उपयोगकर्ता Execute विधि द्वारा वितरित संसाधन को देखने के लिए अधिकृत है । हालाँकि ASP.NET प्राधिकरण और प्रमाणीकरण तर्क मूल संसाधन हैंडलर कहे जाने से पहले चलता है, ASP.NET सीधे Execute विधि द्वारा इंगित हैंडलर को कॉल करता है और नए संसाधन के लिए प्रमाणीकरण और प्राधिकरण तर्क को पुन: चलाएँ नहीं करता है। यदि आपके एप्लिकेशन की सुरक्षा नीति के लिए संसाधन तक पहुँचने के लिए उपयुक्त प्राधिकरण की आवश्यकता होती है, तो अनुप्रयोग को reauthorization को बाध्य करना चाहिए या कस्टम एक्सेस-कंट्रोल तंत्र प्रदान करना चाहिए।
आप निष्पादित विधि के बजाय पुनर्निर्देशन विधि का उपयोग करके सौंदर्यीकरण को बाध्य कर सकते हैं । रीडायरेक्ट क्लाइंट-साइड रीडायरेक्ट करता है जिसमें ब्राउज़र नए संसाधन का अनुरोध करता है। क्योंकि यह पुनर्निर्देशन प्रणाली में प्रवेश करने का एक नया अनुरोध है, यह इंटरनेट सूचना सेवाओं (IIS) और ASP.NET सुरक्षा नीति के सभी प्रमाणीकरण और प्राधिकरण तर्क के अधीन है।
- MSDN से
Response.Redirect में एक अतिरिक्त राउंड ट्रिप शामिल है और एड्रेस बार को अपडेट करता है।
Server.Transfer पता बार को बदलने का कारण नहीं बनता है, सर्वर दूसरे पेज से सामग्री के साथ अनुरोध का जवाब देता है
जैसे
Response.Redirect: -
Server.Transfer: -
Response.Redirect
पेशेवरों: - रेस्टफुल - यह एड्रेस बार को बदलता है, एड्रेस का इस्तेमाल स्टेट इनबेटन रिक्वेस्ट के बदलाव को रिकॉर्ड करने के लिए किया जा सकता है।
विपक्ष: - धीमा - क्लाइंट और सर्वर के बीच एक अतिरिक्त राउंड ट्रिप है। क्लाइंट और सर्वर के बीच पर्याप्त विलंबता होने पर यह महंगा हो सकता है।
Server.Transfer
पेशेवरों: - त्वरित।
विपक्ष: - राज्य खो गया - यदि आप पश्चात पोस्ट के जवाब में एप्लिकेशन की स्थिति को बदलने के लिए Server.Transfer का उपयोग कर रहे हैं, यदि पृष्ठ को फिर से लोड किया गया है तो वह राज्य खो जाएगा, क्योंकि पता बार वैसा ही होगा जैसा वह था पहले अनुरोध पर।
प्रतिक्रिया। रीडायरेक्ट प्रतिक्रिया। रीडायरेक्ट () आपको एक नए पेज पर भेजेगा, एड्रेस बार को अपडेट करेगा और इसे ब्राउजर हिस्ट्री में जोड़ेगा। अपने ब्राउज़र पर आप वापस क्लिक कर सकते हैं। यह हमारे सर्वर पर या किसी अन्य वेब सर्वर पर कुछ सादे HTML पृष्ठों के अनुरोध को पुनर्निर्देशित करता है। यह प्रत्येक अनुरोध पर सर्वर को अतिरिक्त राउंडट्रिप्स का कारण बनता है। यह मूल अनुरोध से क्वेरी स्ट्रिंग और फॉर्म चर को संरक्षित नहीं करता है। यह नए पुनर्निर्देशित URL को देखने में सक्षम करता है जहां इसे ब्राउज़र में पुनर्निर्देशित किया जाता है (और यदि आवश्यक हो तो इसे बुकमार्क करने में सक्षम हो)। प्रतिक्रिया। रीडायरेक्ट बस (HTTP 302) ब्राउज़र पर एक संदेश भेजता है।
Server.Transfer Server.Transfer () एड्रेस बार नहीं बदलता है, हम पीछे नहीं हट सकते। हमें Server.Transfer () का उपयोग नहीं करना चाहिए जब वह उपयोगकर्ता को यह नहीं देखना चाहता कि वह कहां जा रहा है। "लोडिंग" प्रकार पृष्ठ पर शायद ही कभी। यह एक ही सर्वर पर दूसरे .aspx पृष्ठ पर वर्तमान पृष्ठ अनुरोध स्थानांतरित करता है। यह सर्वर संसाधनों को सुरक्षित रखता है और सर्वर को अनावश्यक राउंडट्रिप्स से बचाता है। यह क्वेरी स्ट्रिंग और फॉर्म वेरिएबल्स (वैकल्पिक रूप से) को संरक्षित करता है। यह वास्तविक URL नहीं दिखाता है जहाँ यह उपयोगकर्ताओं के ब्राउज़र में अनुरोध को पुनर्निर्देशित करता है। Server.Transfer ब्राउज़र के बिना कुछ भी जानता है, ब्राउज़र एक पेज का अनुरोध करता है, लेकिन सर्वर दूसरे की सामग्री को वापस करता है।