2009-06-07 9 views
6

¿Es esto posible ... por ejemplo, imagine que respondo a una solicitud con un 302 (o 303) y le informo al navegador que haga una solicitud a una ubicación determinada ... hay un encabezado que puedo enviar con el HTTP 302, para que la solicitud posterior del navegador incluya ese encabezado?¿Está enviando información con un redireccionamiento HTTP que el navegador debe enviar a la ubicación redirigida?

Sé que podría hacer esto con el encabezado de ubicación, como en el redireccionamiento y especificar la información en la url como una cadena de consulta ... pero me pregunto si hay una mejor manera ... parece que debería ser un escenario de fiar ..

'contenido se ha movido, ir aquí .. ah y que tendrá que tomar esto con usted para dar a la ubicación de redirección'

supongo un grande y gordo no!

Gracias de antemano.


Editar

La razón de esto es con respecto a los patrones de PRG, donde se tiene una url url GET y POST, dado que publique los datos y no es aceptable, las redirecciones de servidor usted al GET, y hace algo de 'magia' para 'enviar datos' a ese GET, usando el estado de sesión más frecuente para almacenar una variable.

Sin embargo, esto puede avería en escenarios donde muchas de estas solicitudes PRG están sucediendo, otorgado este no es un escenario común y por lo general nadie tiene que preocuparse por esto .. pero si DO- que necesitará una manera de identifique las solicitudes, esto se puede hacer con los parámetros de cadena de consulta enviados en el 302 ... de modo que una entrada específica se puede poner en estado de sesión de acuerdo con esa solicitud.

La pregunta era acerca de tratar de eliminar la 'clave de solicitud' de la url y hacerla más implícita .. las 'cookies' parecen funcionar, pero solo hacen que la ventana de errores sea más pequeña.

Sería fantástico decir que cuando vaya a la "ubicación" que he especificado, envíe estos parámetros.


Editar

para notar, no estoy tratando de conseguir el navegador para enviar cabeceras arbitrarias a la ubicación, pero si hay alguna cabeceras diseñadas para insinuar el contexto de la solicitud (al igual que los parámetros querystring podrían).

+0

¿Qué necesitas para todos modos? Tal vez un caso de uso nos daría una mejor idea de su problema. – Gumbo

Respuesta

9

Una respuesta de redireccionamiento en sí no contiene ningún dato. Puede redirigir utilizando una URL con parámetros de consulta, pero la nueva "ubicación" deberá saber cómo consumir esos parámetros.

+0

tvanfosson, sí Entiendo que una redirección no contiene datos, y cualquier parámetro de consulta es solo eso ... parámetros que deben ser entendidos ... sin embargo, específicamente lo que quería saber era si era posible enviar esos parámetros fuera de la querystring. – meandmycode

+0

Cookies, por ejemplo, ¿qué pasa si envié una cookie que el receptor eliminó (las redirecciones son relativas)? ¿Sería realista decir que con varios de estos tipos de redirecciones sucediendo a la vez, que la cookie envíe de vuelta desde la solicitud? se envía solo con la solicitud posterior, y no se mezcla con otras solicitudes (en la misma máquina (es decir, imagine que toco la misma URL que me redirecciona en la misma instancia))? – meandmycode

+1

Si la redirección y la página de destino están en el mismo nombre de host, entonces sí, una cookie enviada por la redirección debe ser recibida por el cliente y devuelta a la página de destino. Entonces sí, puedes establecer una cookie con un redireccionamiento y hacer que esa cookie se comunique. Sin embargo, las cookies, por supuesto, no pueden funcionar con dominios cruzados, por lo que para una redirección entre dominios la única opción para enviar información hacia adelante es ponerla en la URL misma, es decir, en la cadena de consulta. – thomasrutter

0

No, eso no es posible. No puedes obligar al cliente a hacer algo. Solo puedes decir "esta no es la ubicación correcta, pero intenta esa ubicación". Pero no se garantiza que el cliente envíe la misma solicitud u otra solicitud a esa nueva ubicación. Y decirle al cliente que agregue un campo de encabezado específico en esa solicitud posterior a la nueva ubicación tampoco es posible.

+0

Eso es justo, no era tanto después de que el navegador enviara encabezados arbitrarios, sino que me preguntaba si había un encabezado 'A' que pudiera enviarlo ... por ejemplo, puedo hacer que el navegador envíe parámetros de cadena de consulta a esa URL (Si no va allí, eso no importa) ... entonces, ¿por qué no poder enviar otros parámetros que simplemente no están en la URL? – meandmycode

+0

Eso causaría vulnerabilidades de seguridad. Solo piense en la fijación de la sesión donde el atacante intenta que la víctima use una sesión específica. Entonces podría decir "configure esta cookie de sesión con esa identificación de sesión". – Gumbo

+0

No estoy seguro de creer ese argumento, es lo mismo que los parámetros de la cadena de consulta .. si su sitio los está utilizando como identificadores de sesión, entonces eso es malo ... se trata simplemente de tratar de redirigir un cliente de nuevo estilo PRG, pero con contexto sobre la 'id' de la solicitud original ... en mi caso, la clave existe únicamente para identificar la instancia de solicitud por usuario ... por lo que si en el caso de que se produjeran varias publicaciones en el formulario, las redirecciones son identificables ... mediante la sesión estado no es confiable en esta forma ... puedo hacerlo hoy usando parámetros de cadena de consulta, pero realmente no me gusta usarlos para esto ... – meandmycode

Cuestiones relacionadas