Server.Overdracht vs. Reactie.Omleiding

Wat is het verschil tussen Server.Transferen Response.Redirect?

  • Wat zijn de voor- en nadelen van elk?
  • Wanneer is de ene geschikt boven de andere?
  • Wanneer is er een niet gepast?

Antwoord 1, autoriteit 100%

Response.Redirectstuurt gewoon een bericht (HTTP 302)naar de browser.

Server.Transfergebeurt zonder dat de browser iets weet, de browser vraagt een pagina op, maar de server retourneert de inhoud van een andere.


Antwoord 2, autoriteit 42%

Response.Redirect()stuurt u naar een nieuwe pagina, werkt de adresbalk bij en voegt deze toe aan de browsergeschiedenis. In je browser kun je terug klikken.

Server.Transfer()verandert de adresbalk niet. Je kunt niet terugslaan.

Ik gebruik Server.Transfer()als ik niet wil dat de gebruiker ziet waar ik heen ga. Soms op een pagina van het type ‘laden’.

Anders gebruik ik altijd Response.Redirect().


Antwoord 3, autoriteit 31%

Om kort te zijn: Response.Redirectvertelt de browser eenvoudig om een andere pagina te bezoeken. Server.Transferhelpt bij het verminderen van serververzoeken, houdt de URL hetzelfde en stelt u, met een beetje bug-bashing, in staat om de queryreeks en formuliervariabelen over te dragen.

Iets dat ik heb gevonden en waarmee ik het eens ben (bron ):

Server.Transferis vergelijkbaar omdat het de gebruiker naar een andere pagina stuurt
met een instructie zoals Server.Transfer("WebForm2.aspx"). Echter,
de verklaring heeft een aantal duidelijke voor- en nadelen.

Eerst overzetten naar een andere pagina met behulp van Server.Transfer
bespaart serverbronnen. In plaats van de browser te vertellen dat:
omleiden, verandert het gewoon de “focus” op de webserver en
de aanvraag overdraagt. Dit betekent dat je niet zo veel HTTP . krijgt
verzoeken die binnenkomen, waardoor de druk op uw
webserver en laat uw applicaties sneller werken.

Maar kijk uit: omdat het “overdracht”-proces alleen op die kan werken
sites die op de server draaien; je kunt Server.Transferniet gebruiken om te verzenden
de gebruiker naar een externe site. Alleen Response.Redirectkan dat.

Ten tweede behoudt Server.Transferde originele URL in de browser.
Dit kan echt helpen bij het stroomlijnen van gegevensinvoertechnieken, hoewel het misschien
zorgen voor verwarring bij het debuggen.

Dat is niet alles: de methode Server.Transferheeft ook een tweede
parameter—”PreserveForm”. Als je dit instelt op True, gebruik dan een statement
zoals Server.Transfer("WebForm2.aspx", True), de bestaande query
string en alle formuliervariabelen zijn nog steeds beschikbaar voor de pagina die u hebt
worden overgezet naar.

Als uw WebForm1.aspx bijvoorbeeld een TextBox-besturingselement heeft met de naam
TextBox1 en u bent overgezet naar WebForm2.aspx met de preserveForm
parameter is ingesteld op True, zou u de waarde van de . kunnen ophalen
originele pagina TextBox-besturing door te verwijzen
Request.Form("TextBox1").


4, Autoriteit 10%

“response.redirect” en “server.transfer” helpt de gebruiker over te dragen van de ene pagina naar een andere pagina terwijl de pagina uitvoert. Maar de manier waarop ze deze overdracht doen / omleiden is heel anders.

Als u een visuele kerel bent en wilt zien dat demonstratie in plaats van de theorie zou willen voorstellen om de onderstaande Facebook-video te zien die het verschil op een meer demonstratieve manier verklaart.

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

Het belangrijkste verschil tussen hen is wie de overdracht doet. In “response.redirect” wordt de overdracht gedaan door de browser, terwijl in “server.transfer” het door de server wordt gedaan. Laten we proberen deze verklaring op een meer gedetailleerde manier te begrijpen.

In “Server.Transfer” volgt de volgorde van hoe de overdracht plaatsvindt:-

1.Gebruiker stuurt een verzoek naar een ASP.NET-pagina. In de onderstaande afbeelding wordt het verzoek naar “WebForm1” gestuurd en willen we naar “Webform2” navigeren.

2.Server begint met het uitvoeren van “Webform1” en de levenscyclus van de pagina begint. Maar voordat de volledige levenscyclus van de pagina is voltooid, gebeurt er “Server.transfer” met “WebForm2”.

3.”Webform2″ pagina-object wordt gemaakt, de volledige levenscyclus van de pagina wordt uitgevoerd en de HTML-uitvoer wordt vervolgens naar de browser gestuurd.

Terwijl in “Response.Redirect” volgt de volgorde van gebeurtenissen voor navigatie:-

1.Client (browser) stuurt een verzoek naar een pagina. In de onderstaande afbeelding wordt het verzoek naar “WebForm1” gestuurd en willen we naar “Webform2” navigeren.

2.Levenscyclus van “Webform1” wordt uitgevoerd. Maar tussen de levenscyclus in gebeurt “Response.Redirect”.

3.In plaats van dat de server een omleiding uitvoert, stuurt hij een HTTP 302-opdracht naar de browser. Deze opdracht vertelt de browser dat hij een GET-verzoek moet starten naar de pagina “Webform2.aspx”.

4.Browser interpreteert de opdracht 302 en verzendt een GET-verzoek voor “Webform2.aspx”.

Met andere woorden “Server.Transfer” wordt uitgevoerd door de server terwijl “Response.Redirect” wordt uitgevoerd door de browser. “Response.Redirect” heeft twee verzoeken nodig om de pagina om te leiden.

Dus wanneer u “server.transfer” wilt gebruiken en wanneer u “response.redirect” wilt gebruiken?

Gebruik “server.transfer” wanneer u pagina’s wilt navigeren die zich op dezelfde server bevinden, gebruik “response.redirect” wanneer u wilt navigeren tussen pagina’s die zich op verschillende server en domein verblijven.

Hieronder is een samenvattingstabel waarvan verschillen uit de verschillen en in welk scenario te gebruiken.


5, Autoriteit 5%

De schoonheid van Server.Transfer is wat u ermee kunt doen:

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

U kunt van uw vorige pagina van uw vorige pagina halen met behulp van de bovenstaande methode zolang u Server.Transfer gebruikt, maar niet respons.dredirect


6, Autoriteit 4%

Naast de opmerking van ScarletGarden moet u ook rekening houden met de impact van zoekmachines en uw omleiding. Is deze pagina permanent verplaatst? Tijdelijk? Het maakt een verschil.

Zie: response.redirect vs. “301 permanent verplaatst” :

We hebben alle respons.redirect gebruikt
een keer of een ander. Het is snel
En gemakkelijke manier om bezoekers te laten wezen
in de juiste richting als ze op de een of andere manier zijn
eindigen op de verkeerde plaats. Maar heb je
weet dat response.redirect een
HTTP-responstatuscode van “302
Gevonden “wanneer je misschien echt wilt
Stuur “301 permanent verplaatst”?

Het onderscheid lijkt klein, maar in
bepaalde gevallen kan het daadwerkelijk een maken
groot verschil. Bijvoorbeeld, als u
gebruik een “301 verplaatst permanent” reactie
code, zullen de meeste zoekmachines verwijderen
de verouderde link van hun index en
vervang deze door de nieuwe. als jij
gebruik “302 Found”, ze gaan verder
terugkeren naar de oude pagina…


Antwoord 7, autoriteit 3%

Er zijn veel verschillen zoals hierboven aangegeven. Behalve bovenal is er nog een verschil. Response.Redirect()kan worden gebruikt om de gebruiker om te leiden naar elke pagina die geen deel uitmaakt van de applicatie, maar Server.Transfer()kan alleen worden gebruikt om de gebruiker om te leiden binnen de applicatie.

//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");

Antwoord 8, autoriteit 2%

De overdracht is volledig aan de serverzijde. De adresbalk van de klant blijft constant. Enige complexiteit over de overdracht van context tussen verzoeken. Het doorspoelen en herstarten van pagina-handlers kan duur zijn, dus doe uw overdracht vroeg in de pijplijn, b.v. in een HttpModule tijdens BeginRequest. Lees de MSDN-documenten aandachtig en test en begrijp de nieuwe waarden van HttpContext.Request, vooral in Postback-scenario’s. We gebruiken meestal Server.Transfer voor foutscenario’s.

Redirect beëindigt het verzoek met een 302-status en client-side roundtrip-reactie met en eet intern een uitzondering op (kleine serverperf-hit – hangt af van hoeveel u per dag doet) Client navigeert vervolgens naar een nieuw adres. Browser adresbalk & geschiedenisupdates enz. Klant betaalt de kosten van een extra retourvlucht – de kosten variëren afhankelijk van de latentie. In ons bedrijf leiden we veelom, we hebben onze eigen module geschreven om de uitzonderingskosten te vermijden.


Antwoord 9, autoriteit 2%

Response.Redirect is duurder omdat het een extra rit naar de server toevoegt om erachter te komen waar te gaan.

Server.Transfer is efficiënter, maar het kan een beetje verkeerd leiden tot de gebruiker, omdat de URL niet fysiek verandert.

In mijn ervaring is het verschil in de prestaties niet significant genoeg geweest om de laatste benadering

te gebruiken


10, Autoriteit 2%

Server.Transfer verandert de URL niet in de clientbrowser, dus effectief weet de browser niet dat u bent gewijzigd in een andere handler aan de server. Response.Redirect vertelt de browser om naar een andere pagina te gaan, zodat de URL in de titelbalk verandert.

Server.Transfer is iets sneller omdat het een roundtrip op de server vermijdt, maar de niet-verandering van URL kan voor u goed of slecht zijn, afhankelijk van wat u probeert te doen.


11, Autoriteit 2%

Response.Redirect: vertelt de browser die de gevraagde pagina op een nieuwe locatie te vinden is. De browser initieert vervolgens een ander verzoek naar de nieuwe pagina die de inhoud in de browser wordt laden. Dit resulteert in twee verzoeken van de browser.

Server.Transfer: Het transfereert de uitvoering van de eerste pagina naar de tweede pagina op de server. Wat de browserclient betreft, heeft het één verzoek en de eerste pagina die reageert met inhoud.
Het voordeel van deze aanpak is een minder rondreis naar de server van de klantenbrowser. Ook zijn alle gepositioneerde formuliervariabelen en query-stringparameters ook beschikbaar voor de tweede pagina.


12

Response.Redirect omvat een extra ronde trip en werkt de adresbalk bij.

Server.Transfer veroorzaakt niet dat de adresbalk verandert, de server reageert op het verzoek met inhoud van een andere pagina

b.g

response.redirect: –

  1. op de client De browser aanvraagt ​​een pagina http: //initialrequestedpage.aspx
  2. op de server reageert op het verzoek met 302 passeren van het Addirect-adres http: //anotherPage.aspx .
  3. Op de client doet de browser een tweede verzoek aan het adres http://AnotherPage.aspx.
  4. Op de server reageert met inhoud van http://AnotherPage.aspx

Server.Transfer:-

  1. Vraag in de clientbrowser een pagina op http://InitiallyRequestedPage.aspx
  2. Op de server Server.Transfer naar http://AnotherPage.aspx
  3. Op de server wordt gereageerd op het verzoek om http://InitiallyRequestedPage.aspxinhoud door te geven van http://AnotherPage.aspx

Response.Redirect

Voordelen:-
RESTful – Het verandert de adresbalk, het adres kan worden gebruikt om statusveranderingen tussen verzoeken vast te leggen.

Nadelen:-
Langzaam – Er is een extra retour tussen de client en de server. Dit kan duur zijn als er een aanzienlijke latentie is tussen de client en de server.

Server.Transfer

Voordelen:-
Snel.

Nadelen:
Status verloren – Als u Server.Transfer gebruikt om de status van de toepassing te wijzigen als reactie op postbacks, als de pagina vervolgens opnieuw wordt geladen, gaat die status verloren, omdat de adresbalk hetzelfde zal zijn als op de eerste verzoek.


Antwoord 13

Response.Redirect
Response.Redirect() stuurt u naar een nieuwe pagina, werkt de adresbalk bij en voegt deze toe aan de browsergeschiedenis. In uw browser kunt u terug klikken.
Het leidt het verzoek om naar enkele eenvoudige HTML-pagina’s op onze server of naar een andere webserver.
Het veroorzaakt bij elk verzoek extra roundtrips naar de server.
Het behoudt de queryreeks- en formuliervariabelen van het oorspronkelijke verzoek niet.
Het maakt het mogelijk om de nieuwe omgeleide URL te zien waar deze wordt omgeleid in de browser (en in staat te zijn om deze te bookmarken als dat nodig is).
Antwoord. Redirect stuurt eenvoudig een bericht naar de (HTTP 302) browser.

Server.Transfer
Server.Transfer() verandert de adresbalk niet, we kunnen niet terugslaan. Men zou Server.Transfer() moeten gebruiken als hij/zij niet wil dat de gebruiker ziet waar hij naartoe gaat. Ergens op een pagina van het “ladende” type.
Het brengt het huidige paginaverzoek over naar een andere .aspx-pagina op dezelfde server.
Het behoudt serverbronnen en vermijdt onnodige retourvluchten naar de server.
Het behoudt Query String en Form Variables (optioneel).
Het toont niet de echte URL waar het het verzoek omleidt in de webbrowser van de gebruiker.
Server.Transfer gebeurt zonder dat de browser iets weet, de browser vraagt een pagina op, maar de server retourneert de inhoud van een andere.

Other episodes