2010-02-22 10 views
16

Capisco che la maggior parte delle lingue supporta i reindirizzamenti lato server (asp.net: Response.Redirect, PHP: header('newpage') ;). Puoi anche eseguire un reindirizzamento con JavaScript (window.location.href="newLocationURL").Best practice per reindirizzamenti lato client e lato server: quando utilizzare cosa?

Quando sceglieresti l'uno rispetto all'altro?

Rispetto al pool ASP.net/IIS7(app in modalità integrata, abilita app a 32 bit = falso), ho notato che anche quando la pagina ha un'intestazione 302, l'intero corpo della pagina viene inviato al lato client.

E I believe this is not the case with PHP, vengono inviate solo le intestazioni? Per quotare Reindirizzare lato client significa seguire i seguenti passaggi: Lato client -> Lato server -> Lato client -> Lato server -> Lato client.

Reindirizzare sul lato server significa: Lato client -> Lato server -> Lato client (solo intestazioni) * -> Lato server -> Lato client.

Esiste uno standard per il reindirizzamento lato server o standard W3C che differisce da una tecnologia server Web a un'altra?

Edit: Io sono solo preoccupato Response.Redirect (in asp.net) e non Server.Transfer, almeno per questa discussione

risposta

5

L'esempio JavaScript è in realtà non un redirect . Non c'è modo di una risposta 301/302. È solo una semplice richiesta che accade durante un certo evento Javascript molto tempo dopo che la pagina è arrivata. Se lo fai durante il caricamento della pagina, allora avrebbe un sovraccarico maggiore rispetto a un reindirizzamento reale e non funzionerebbe anche su browser con disabilitazione JS.

I reindirizzamenti devono essere avviati dal lato server con una risposta 301/302.Tutti i linguaggi/framework per i webapp sono impostati su 302. Di solito è possibile renderlo 301 aggiungendo un parametro o una riga di codice in più che lo istruisce. Il vantaggio di 301 è il modo in cui la particolare richiesta non sarà più indicizzata (dai) dai searchbots.

3

in ASP.Net, v'è una distinzione importante tra i due tipi di server di reindirizzamenti Sono Response.Redirect e Server.Transfer.

Se si chiama Response.Redirect, questo comporta due viaggi di andata e ritorno al server. Alla prima chiamata al server, la risposta del server indirizza il browser a richiedere la pagina successiva. Richiedere che la prossima pagina costituisca il secondo round trip sul server web.

Se si utilizza Server.Transfer, è previsto un solo viaggio. Pertanto, c'è molto meno traffico di rete. Tuttavia, esiste un limite all'utilizzo di Server.Transfer, ovvero la pagina di destinazione deve trovarsi sullo stesso server Web. Cioè, non puoi Server.Transfer dalla tua app Web a www.Google.com. Ma puoi Response.Redirect ad esso.

Ci sono altri dettagli coinvolti nell'utilizzo di uno di questi approcci che vorresti ricercare prima di usarli. Tuttavia, ritengo che sia significativo nel contesto di questa domanda notare che in qualsiasi lingua, Response.Redirect può causare un traffico di rete molto più pesante di quanto sia realmente necessario.

+0

la tua risposta è apprezzata. Server.Transfer non invia un 302 diverso da Response.Redirect. Scusa se non sono stato chiaro con la mia domanda – ram

-1

Dipende davvero da dove si decide che è necessario reindirizzare. Se è il codice lato server che determina che devi reindirizzare, allora è il codice lato server che emette il comando di reindirizzamento. Se puoi decidere sul lato client che è necessario un reindirizzamento, fallo dal codice cliente.

Probabilmente è più efficiente dal lato client, in quanto si evita un back-e-indietro della cosa redirect lato server ..

+0

Se è il codice lato server che determina che devi reindirizzare ciò che impedisce al codice lato server di aggiungere un codice javascript, dicendo al client di reindirizzare? – ram

+0

Nulla: puoi farlo se vuoi, ma chiamare Response.Redirect è, per me, più facile che generare il javascript per impostare window.location.href. E la risposta al browser dovrebbe essere un po 'più piccola. PS: nella mia esperienza, asp.net * non * invia l'intero contenuto della pagina con un Response.Redirect - invia solo le intestazioni necessarie e la piccola quantità di html per il messaggio standard "oggetto trasferito a" (che viene usato raramente). – Ray

+0

Yup Ray, sono stato sorpreso di vederlo in Charles. Succede sia per Cassini che per la modalità integrata con IIS7, sebbene non sia stata verificata con altre configurazioni server/server – ram

Problemi correlati