2010-02-22 14 views
16

Entiendo que la mayoría de los idiomas admiten el lado del servidor redirige (asp.net: Response.Redirect, PHP: header('newpage') ;). También puede hacer una redirección con JavaScript (window.location.href="newLocationURL").Mejores prácticas para el lado del cliente frente a las redirecciones del lado del servidor: cuándo usar qué?

¿Cuándo elegirías una sobre la otra?

Con respecto a ASP.net/IIS7(caja de aplicaciones en modo integrado, habilitar aplicaciones de 32 bits = falso), noté que incluso cuando la página tiene un encabezado 302, todo el cuerpo de la página se envía al lado del cliente.

Y I believe this is not the case with PHP, solo se envían los encabezados? Para citar redirigir en el lado del cliente significa seguir los pasos: del lado del cliente -> del lado del servidor -> del lado del cliente -> del lado del servidor -> del lado del cliente.

Redirigir en el lado del servidor significa: del lado del cliente -> del lado del servidor -> del lado del cliente (encabezados solamente) * -> del lado del servidor -> del lado del cliente.

¿Hay una implementación de redirección W3C estándar o del lado del servidor que difiera de una tecnología de servidor web a otra?

Editar: Soy sólo se preocupa por Response.Redirect (en asp.net) y no Server.Transfer, al menos para esta discusión

Respuesta

5

El ejemplo de JavaScript es en realidad no es una redirección . No hay medios para una respuesta 301/302. Es solo una solicitud simple que ocurre durante un determinado evento de Javascript mucho tiempo después de que se llega a la página. Si haces esto durante la carga de la página, entonces tendría más sobrecarga que una redirección real y tampoco funcionaría en navegadores con JS desactivado.

Los redireccionamientos se iniciarán desde el lado del servidor con una respuesta 301/302.Todos los lenguajes/marcos de aplicaciones web por defecto son 302. Por lo general, puede convertirlos en 301 agregando un parámetro extra o una línea de código que así lo indique. El beneficio de 301 es, por cierto, que la solicitud particular no será indexada (más) por los robots de búsqueda.

3

En ASP.Net, existe una importante distinción entre dos tipos de servidor redirecciones laterales Son Response.Redirect y Server.Transfer.

Si llama al Response.Redirect, eso implica dos viajes redondos al servidor. En la primera llamada al servidor, la respuesta del servidor ordena al navegador que solicite la página siguiente. Solicitar la siguiente página constituye el viaje de ida y vuelta al servidor web.

Si utiliza Server.Transfer, solo hay un viaje de ida y vuelta. Por lo tanto, hay mucho menos tráfico de red. Sin embargo, hay una limitación para usar Server.Transfer, que es que la página de destino debe estar en el mismo servidor web. Es decir, no puede Server.Transfer desde su aplicación web a www.Google.com. Pero puedes responder. Dirígete a él.

Hay otros detalles relacionados con el uso de cualquiera de estos enfoques que le gustaría investigar antes de usarlos. Sin embargo, creo que es significativo en el contexto de esta pregunta, tener en cuenta que en cualquier idioma, Response.Redirect puede generar un tráfico de red mucho más pesado de lo que realmente es necesario.

+0

su respuesta es apreciada. Server.Transfer no envía un 302 a diferencia de Response.Redirect. Lo siento, no estaba claro con mi pregunta – ram

-1

Realmente depende de dónde decida que necesita redirigir. Si es el código del lado del servidor el que determina que tiene que redirigir, entonces es el código del lado del servidor el que emite el comando redirigir. Si puede decidir por el lado del cliente que se necesita una redirección, hágalo desde el código del cliente.

Probablemente es más eficiente desde el lado del cliente, ya que se evita una la parte de atrás y hacia adelante de la cosa redirección del lado del servidor ..

+0

Si es el código del lado del servidor que determina que tiene que redirigir lo que impide que el código del lado del servidor agregue un código de JavaScript, diciéndole al cliente que redirija? – ram

+0

Nada: puede hacerlo si lo desea, pero llamar a Response.Redirect es, para mí, más fácil que generar el javascript para establecer window.location.href. Y la respuesta al navegador debería ser un poco más pequeña. PD: en mi experiencia, asp.net * no * envía todo el contenido de la página con Response.Redirect: solo envía los encabezados necesarios y la pequeña cantidad de html para el mensaje estándar "objeto movido a" (que rara vez se usa) – Ray

+0

Yup Ray, me sorprendió ver eso en Charles. Sucede tanto para Cassini como para el modo integrado de IIS7, aunque no se ha verificado con otras configuraciones de servidor/servidor – ram

Cuestiones relacionadas