asp.net सर्वर। ट्रांसफर बनाम। Response.Redirect




server.transfer (15)

स्थानांतरण पूरी तरह सर्वर-साइड है। ग्राहक पता बार स्थिर रहता है। अनुरोधों के बीच संदर्भ के हस्तांतरण के बारे में कुछ जटिलता। पेज हैंडलर को फ्लश करना और पुनरारंभ करना महंगा हो सकता है, इसलिए शुरुआती शुरुआत में पाइपलाइन में अपना स्थानांतरण करें जैसे कि BeginRequest के दौरान एक HttpModule में। एमएसडीएन दस्तावेज़ों को ध्यान से पढ़ें, और HttpContext.Request के नए मानों का परीक्षण और समझें - खासकर पोस्टबैक परिदृश्य में। हम आम तौर पर सर्वर का उपयोग करते हैं। त्रुटि परिदृश्यों के लिए ट्रांसफर।

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

Server.Transfer बीच क्या अंतर है। Server.Transfer और Response.Redirect ?

  • प्रत्येक के फायदे और नुकसान क्या हैं?
  • एक दूसरे पर कब उपयुक्त है?
  • कब उपयुक्त नहीं है?

Response.Redirect() का उपयोग तब किया जाना चाहिए जब:

  • हम अनुरोध को हमारे सर्वर पर या किसी अन्य वेब सर्वर पर कुछ सादे HTML पृष्ठों पर रीडायरेक्ट करना चाहते हैं
  • हम प्रत्येक अनुरोध पर सर्वर के लिए अतिरिक्त roundtrips पैदा करने की परवाह नहीं करते हैं
  • हमें मूल अनुरोध से क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को संरक्षित करने की आवश्यकता नहीं है
  • हम चाहते हैं कि हमारे उपयोगकर्ता नए रीडायरेक्ट किए गए यूआरएल को देख सकें जहां उन्हें अपने ब्राउज़र में रीडायरेक्ट किया गया हो (और यदि आवश्यक हो तो इसे बुकमार्क करने में सक्षम हो)

Server.Transfer() का उपयोग तब किया जाना चाहिए जब:

  • हम वर्तमान पृष्ठ अनुरोध को उसी सर्वर पर किसी अन्य .aspx पृष्ठ पर स्थानांतरित करना चाहते हैं
  • हम सर्वर संसाधनों को संरक्षित करना चाहते हैं और सर्वर पर अनावश्यक राउंडट्रिप्स से बचें
  • हम क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को सुरक्षित रखना चाहते हैं (वैकल्पिक रूप से)
  • हमें वास्तविक यूआरएल दिखाने की ज़रूरत नहीं है जहां हमने उपयोगकर्ताओं को वेब ब्राउजर में अनुरोध को रीडायरेक्ट किया था

सर्वर की सुंदरता। ट्रांसफर यह है कि आप इसके साथ क्या कर सकते हैं:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

जब तक आप सर्वर का उपयोग करते हैं, तब तक आप उपर्युक्त विधि का उपयोग करके अपने पिछले पृष्ठ से कुछ भी प्राप्त कर सकते हैं। ट्रांसफर लेकिन प्रतिक्रिया नहीं। रेडियोधर्मी


Response.Redirect: ब्राउज़र को बताता है कि अनुरोधित पृष्ठ एक नए स्थान पर पाया जा सकता है। ब्राउज़र तब ब्राउज़र में अपनी सामग्री लोड करने वाले नए पेज पर एक और अनुरोध शुरू करता है। इसका परिणाम ब्राउज़र द्वारा दो अनुरोधों में होता है।

सर्वर। ट्रांसफर : यह सर्वर पर दूसरे पृष्ठ से निष्पादन को दूसरे पृष्ठ पर स्थानांतरित करता है। जहां तक ​​ब्राउज़र क्लाइंट का संबंध है, उसने एक अनुरोध किया है और प्रारंभिक पृष्ठ सामग्री के साथ प्रतिक्रिया दे रहा है। इस दृष्टिकोण का लाभ क्लाइंट ब्राउज़र से सर्वर के लिए एक कम दौर यात्रा है। साथ ही, किसी भी पोस्ट फॉर्म चर और क्वेरी स्ट्रिंग पैरामीटर दूसरे पृष्ठ पर भी उपलब्ध हैं।


Response.Redirect क्लाइंट को पहले पृष्ठ आने के बाद पेज को दूसरे पृष्ठ पर रीडायरेक्ट करता है। तो ग्राहक पुनर्निर्देशन जानता है।

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

तो यह चुनने के लिए आपकी आवश्यकताओं पर निर्भर करता है कि कौन सा बेहतर है।


Response.Redirect Response.Redirect () आपको एक नए पृष्ठ पर भेज देगा, पता बार अपडेट करें और इसे ब्राउज़र इतिहास में जोड़ें। अपने ब्राउज़र पर आप वापस क्लिक कर सकते हैं। यह हमारे सर्वर या किसी अन्य वेब सर्वर पर कुछ सादे HTML पृष्ठों के अनुरोध को पुनर्निर्देशित करता है। यह प्रत्येक अनुरोध पर सर्वर के लिए अतिरिक्त roundtrips का कारण बनता है। यह मूल अनुरोध से क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को सुरक्षित नहीं करता है। यह नया रीडायरेक्ट यूआरएल देखने में सक्षम बनाता है जहां इसे ब्राउज़र में रीडायरेक्ट किया जाता है (और यदि आवश्यक हो तो इसे बुकमार्क करने में सक्षम हो)। प्रतिक्रिया। रीडायरेक्ट बस एक संदेश नीचे भेजता है (HTTP 302) ब्राउज़र।

सर्वर। ट्रांसफर सर्वर। ट्रांसफर () पता बार नहीं बदलता है, हम वापस हिट नहीं कर सकते हैं। किसी को सर्वर का उपयोग करना चाहिए। ट्रांसफर () जब वह नहीं चाहता कि उपयोगकर्ता यह देख सके कि वह कहां जा रहा है। कभी-कभी "लोडिंग" प्रकार पृष्ठ पर। यह वर्तमान पृष्ठ अनुरोध को उसी सर्वर पर किसी अन्य .aspx पृष्ठ पर स्थानांतरित करता है। यह सर्वर संसाधनों को संरक्षित करता है और सर्वर को अनावश्यक राउंडट्रिप्स से बचाता है। यह क्वेरी स्ट्रिंग और फॉर्म वैरिएबल (वैकल्पिक रूप से) को सुरक्षित रखता है। यह वास्तविक यूआरएल नहीं दिखाता है जहां यह उपयोगकर्ता वेब ब्राउज़र में अनुरोध को पुनर्निर्देशित करता है। सर्वर। ब्राउज़र को कुछ भी जानने के बिना होता है, ब्राउज़र एक पृष्ठ का अनुरोध करता है, लेकिन सर्वर दूसरे की सामग्री देता है।


Response.Redirect में एक अतिरिक्त दौर यात्रा शामिल है और पता बार अपडेट करता है।

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

जैसे

Response.Redirect: -

  1. क्लाइंट पर ब्राउज़र एक पृष्ठ http: //InitiallyRequestedPage.aspx का अनुरोध करता है
  2. सर्वर पर 302 के साथ अनुरोध को प्रतिसाद देता है कि रीडायरेक्ट पता http: //AnotherPage.aspx गुजर रहा है।
  3. क्लाइंट पर ब्राउज़र http: //AnotherPage.aspx पते पर दूसरा अनुरोध करता है।
  4. सर्वर पर http: //AnotherPage.aspx से सामग्री के साथ प्रतिक्रिया करता है

Server.Transfer: -

  1. क्लाइंट ब्राउज़र पर एक पृष्ठ http: //InitiallyRequestedPage.aspx का अनुरोध करता है
  2. सर्वर सर्वर पर। Http: //AnotherPage.aspx पर ट्रांसफर करें
  3. सर्वर पर http: //InitiallyRequestedPage.aspx http: //AnotherPage.aspx से वापस सामग्री को पास करने के अनुरोध के लिए प्रतिक्रिया की गई है

Response.Redirect

पेशेवर: - विश्वसनीय - यह पता बार बदलता है, पते का उपयोग अनुरोध के बीच राज्य के परिवर्तनों को रिकॉर्ड करने के लिए किया जा सकता है।

विपक्ष: - धीमा - क्लाइंट और सर्वर के बीच एक अतिरिक्त राउंड-ट्रिप है। क्लाइंट और सर्वर के बीच पर्याप्त विलंब होने पर यह महंगा हो सकता है।

Server.Transfer

पेशेवर: - त्वरित।

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


सर्वर। ट्रांसफर क्लाइंट ब्राउज़र में यूआरएल नहीं बदलता है, इसलिए ब्राउज़र को पता नहीं है कि आप किसी अन्य सर्वर-साइड हैंडलर में बदल गए हैं। Response.Redirect ब्राउज़र को एक अलग पृष्ठ पर जाने के लिए कहता है, इसलिए टाइटलबार में यूआरएल बदल जाता है।

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


Response.Redirect अधिक महंगा है क्योंकि यह पता लगाने के लिए सर्वर पर एक अतिरिक्त यात्रा जोड़ता है कि कहां जाना है।

सर्वर। ट्रांसफर अधिक कुशल है हालांकि यह उपयोगकर्ता के लिए थोड़ा गलत हो सकता है क्योंकि यूआरएल शारीरिक रूप से परिवर्तित नहीं होता है।

मेरे अनुभव में, प्रदर्शन में अंतर बाद के दृष्टिकोण का उपयोग करने के लिए पर्याप्त महत्वपूर्ण नहीं रहा है


स्कारलेट गार्डन की टिप्पणी के अलावा, आपको खोज इंजन और आपके रीडायरेक्ट के प्रभाव पर भी विचार करना होगा। क्या यह पृष्ठ स्थायी रूप से स्थानांतरित हो गया है? अस्थायी रूप से? यह एक फर्क पड़ता है।

देखें: Response.Redirect बनाम "301 स्थायी रूप से हटाया गया" :

हमने सभी को एक बार या किसी अन्य पर Response.Redirect का उपयोग किया है। विज़िटर को सही दिशा में इंगित करने का यह तेज़ और आसान तरीका है यदि वे किसी भी तरह गलत जगह पर समाप्त होते हैं। लेकिन क्या आप जानते थे कि Response.Redirect "302 मिला" का एक HTTP प्रतिक्रिया स्थिति कोड भेजता है जब आप वास्तव में "301 स्थायी रूप से स्थानांतरित" भेजना चाहते हैं?

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


"response.redirect" और "server.transfer" पृष्ठ को निष्पादित करते समय उपयोगकर्ता को एक पृष्ठ से दूसरे पृष्ठ पर स्थानांतरित करने में मदद करता है। लेकिन जिस तरह से वे इस स्थानांतरण / पुनर्निर्देशन करते हैं वह बहुत अलग है।

यदि आप दृश्यमान व्यक्ति हैं और सिद्धांत के बजाए प्रदर्शन देखना चाहते हैं तो मैं नीचे दिए गए फेसबुक वीडियो को देखने का सुझाव दूंगा जो अधिक प्रदर्शनकारी तरीके से अंतर बताता है।

https://www.facebook.com/photo.php?v=762186150488997

उनके बीच मुख्य अंतर यह है कि स्थानांतरण कौन करता है। "Response.redirect" में स्थानांतरण ब्राउज़र द्वारा किया जाता है जबकि "server.transfer" में यह सर्वर द्वारा किया जाता है। आइए इस कथन को और अधिक विस्तार से समझने की कोशिश करें।

"सर्वर। ट्रांसफर" में निम्नलिखित स्थानांतरण होता है कि अनुक्रम कैसे होता है: -

1. उपयोगकर्ता एक एएसपी.NET पृष्ठ के लिए अनुरोध भेजता है। नीचे दिए गए आंकड़े में अनुरोध "WebForm1" को भेजा गया है और हम "वेबफॉर्म 2" पर नेविगेट करना चाहते हैं।

2. सर्वर "वेबफॉर्म 1" निष्पादित करना शुरू करता है और पृष्ठ का जीवन चक्र शुरू होता है। लेकिन पृष्ठ के पूर्ण जीवन चक्र को पूरा करने से पहले "Server.transfer" "WebForm2" होता है।

3. "वेबफॉर्म 2" पेज ऑब्जेक्ट बनाया गया है, पूर्ण पृष्ठ जीवन चक्र निष्पादित किया गया है और आउटपुट HTML प्रतिक्रिया तब ब्राउज़र पर भेजी जाती है।

जबकि "Response.Redirect" में निम्नलिखित नेविगेशन के लिए घटनाओं का अनुक्रम है: -

1. क्लाइंट (ब्राउज़र) किसी पृष्ठ पर अनुरोध भेजता है। नीचे दिए गए आंकड़े में अनुरोध "WebForm1" को भेजा गया है और हम "वेबफॉर्म 2" पर नेविगेट करना चाहते हैं।

2. "वेबफॉर्म 1" का जीवन चक्र निष्पादन शुरू होता है। लेकिन जीवन चक्र के बीच में "Response.Redirect" होता है।

3. सर्वर रीडायरेक्ट करने के बजाए, वह ब्राउजर को HTTP 302 कमांड भेजता है। यह आदेश ब्राउज़र को बताता है कि उसे "Webform2.aspx" पृष्ठ पर एक GET अनुरोध शुरू करना है।

4. ब्राउजर 302 कमांड का अर्थ देता है और "Webform2.aspx" के लिए एक GET अनुरोध भेजता है।

दूसरे शब्दों में "सर्वर। ट्रांसफर" सर्वर द्वारा निष्पादित किया जाता है जबकि "Response.Redirect" को त्रि ब्राउज़र द्वारा निष्पादित किया जाता है। "Response.Redirect" को पृष्ठ के रीडायरेक्ट करने के लिए दो अनुरोधों की आवश्यकता है।

तो "सर्वर। ट्रांसफर" का उपयोग कब करें और "Response.Redirect" का उपयोग कब करें?

जब आप एक ही सर्वर पर रहने वाले पृष्ठों को नेविगेट करना चाहते हैं, तो "सर्वर। ट्रांसफर" का उपयोग करें, जब आप विभिन्न सर्वर और डोमेन पर मौजूद पृष्ठों के बीच नेविगेट करना चाहते हैं तो "Response.Redirect" का उपयोग करें।

नीचे एक सारणी सारणी है जिसमें भिन्नताएं हैं और किस परिदृश्य में उपयोग करना है।


  1. हाइपरलिंक और Response.Redirect की तरह, सर्वर। ट्रांसफर का उपयोग उसी वेब सर्वर पर चल रहे अन्य पृष्ठों / साइटों पर नेविगेट करने के लिए किया जाता है।
  2. सर्वर। ट्रांसफर का उपयोग किसी भिन्न वेब सर्वर पर साइटों / पृष्ठों पर नेविगेट करने के लिए नहीं किया जा सकता है।
  3. सर्वर। ट्रांसफर पता बार में यूआरएल नहीं बदलता है
  4. Server.Transfer Response.Redirect से तेज़ है क्योंकि एक अनुरोध / प्रतिक्रिया चक्र में सर्वर पर पुनर्निर्देशन होता है। Response.Redirect () में 2 अनुरोध / प्रतिक्रिया चक्र शामिल हैं।
  5. सर्वर के साथ। मूल अनुरोध से फॉर्म वैरिएबल को संरक्षित किया जाता है।

Response.Redirect बस ब्राउज़र पर एक संदेश (HTTP 302) भेजता है।

Server.Transfer । ब्राउज़र को कुछ भी जानने के बिना होता है, ब्राउज़र एक पृष्ठ का अनुरोध करता है, लेकिन सर्वर दूसरे की सामग्री देता है।


संक्षिप्त होने के लिए: Response.Redirect बस ब्राउज़र को किसी अन्य पृष्ठ पर जाने के लिए कहता है। Server.Transfer ट्रांसफर सर्वर अनुरोधों को कम करने में मदद करता है, यूआरएल को वही रखता है और थोड़ी-थोड़ी बग-बैशिंग के साथ, आपको क्वेरी स्ट्रिंग को स्थानांतरित करने और चर बनाने के लिए अनुमति देता है।

कुछ जो मैंने पाया और उससे सहमत ( source ):

Server.TransferServer.Transfer("WebForm2.aspx") समान है कि यह उपयोगकर्ता को किसी अन्य पृष्ठ पर Server.Transfer("WebForm2.aspx") जैसे Server.Transfer("WebForm2.aspx") साथ भेजता है। Server.Transfer("WebForm2.aspx") । हालांकि, बयान में कई अलग-अलग फायदे और नुकसान हैं।

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

लेकिन देखें: क्योंकि "स्थानांतरण" प्रक्रिया केवल उन साइटों पर काम कर सकती है जो सर्वर पर चल रही हैं; आप Server.Transfer का उपयोग नहीं कर सकते हैं। उपयोगकर्ता को बाहरी साइट पर भेजने के लिए Server.Transfer करें। केवल Response.Redirect ऐसा कर सकता है।

दूसरा, Server.TransferServer.Transfer ब्राउज़र में मूल यूआरएल रखता है। यह वास्तव में डेटा प्रविष्टि तकनीकों को व्यवस्थित करने में मदद कर सकता है, हालांकि यह डिबगिंग के दौरान भ्रम के लिए बना सकता है।

यह सब नहीं है: Server.TransferServer.Transfer विधि में दूसरा पैरामीटर भी Server.Transfer "preserveForm"। यदि आप इसे True सेट करते हैं, तो Server.Transfer("WebForm2.aspx", True) जैसे किसी कथन का उपयोग करके, मौजूदा क्वेरी स्ट्रिंग और कोई भी फॉर्म चर आपके द्वारा स्थानांतरित किए जा रहे पृष्ठ पर अभी भी उपलब्ध होगा।

उदाहरण के लिए, यदि आपके WebForm1.aspx में टेक्स्टबॉक्स नियंत्रण नामक टेक्स्टबॉक्स नियंत्रण है और आपने WebForm2.aspx पर संरक्षित किया है, तो संरक्षितफॉर्म पैरामीटर सत्य पर सेट है, तो आप Request.Form("TextBox1") को संदर्भित करके मूल पृष्ठ टेक्स्टबॉक्स नियंत्रण के मान को पुनर्प्राप्त करने में सक्षम होंगे। Request.Form("TextBox1")


Response.Redirect() आपको एक नए पृष्ठ पर भेज देगा, पता बार अपडेट करेगा और इसे ब्राउज़र इतिहास में जोड़ देगा। अपने ब्राउज़र पर आप वापस क्लिक कर सकते हैं।

Server.Transfer() पता बार नहीं बदलता है। आप वापस हिट नहीं कर सकते हैं।

मैं Server.Transfer() उपयोग करता हूं। Server.Transfer() जब मैं नहीं चाहता कि उपयोगकर्ता यह देखने के लिए कि मैं कहां जा रहा हूं। कभी-कभी "लोडिंग" प्रकार पृष्ठ पर।

अन्यथा मैं हमेशा Response.Redirect() उपयोग करूंगा।







server.transfer