c# asp.net .net http-headers response.redirect

c# - Response.Redirect strips Referente del encabezado: ¿es posible volver a agregarlo?



asp.net .net (12)

¿ Server.Transfer es una opción?

Sin embargo, hay algunas advertencias que deberá tener en cuenta. EG Conserva la URL original, la Autorización, etc. Más detalles en el enlace.

Mantener la URL original puede ser ventajoso en esta circunstancia.

Estoy usando un Response.Redirect para redirigir a los usuarios a otro servidor para descargar un archivo, y el otro servidor está revisando el encabezado para asegurarse de que proviene del servidor correcto ... sin embargo, parece que Response.Redirect quita los encabezados de la respuesta. .

¿Alguien sabe cómo puedo agregar los encabezados? He intentado:

Response.AddHeader("Referer", "www.domain.com");

Pero la página de recepción prueba falsa cuando compruebo si el encabezado Referrer está configurado.

Cualquier sugerencia de cómo puedo hacer que funcione, además de mostrar un botón para que el usuario haga clic (me gustaría mantener la URL oculta para el usuario tanto como sea posible).


El encabezado de referencia que recibe su segundo servidor lo genera el navegador y es poco probable que pueda cambiarlo de manera sensata.

¿Intentó agregar el referidor a la URL y luego leer eso en su segundo servidor?

Response.Redirect("url?Referer=" + Server.UrlEncode(Request.UrlReferrer));


Eso irá en contra de la definición del encabezado Referer (sic):

El campo Referer [sic] request-header permite al cliente especificar, para beneficio del servidor, la dirección (URI) del recurso desde el que se obtuvo el URI de solicitud (el "referente", aunque el campo del encabezado está mal escrito).

Si está redireccionando, este no es el caso para agregar este encabezado.

Si necesita esta información, intente con una cookie o alguna variable de sesión, o incluso una variable en la URL como ya le han dicho.


Establezca una cookie de autenticación (con un hash con clave y una expiración de 5 minutos), envíe una respuesta de redirección, el navegador envía una nueva solicitud al segundo servidor (si es el mismo dominio) junto con la autorización de coquetería, el segundo servidor verifica la cookie, asegura que solo el primer servidor pudo haberlo configurado y devuelve el contenido al navegador.


No creo que sea posible. Lo que está enviando al cliente es un encabezado de ubicación que le dice al cliente que cargue la página referida en lugar de la página solicitada originalmente. En este caso, el cliente no proviene de un enlace y, por lo tanto, no establece el encabezado de referencia. Básicamente es como si el usuario escribiera la url de redirección en la barra de direcciones de su navegador.

Puede guardar el referente en la sesión o codificarlo en la URL como parámetro de consulta. Al igual que los formularios, el inicio de sesión hace con ReturnUrl.


Si la redirección es para el mismo proceso, usaría un valor de sesión para almacenar el URI de referencia para permitir que la página secundaria lo recoja. Lo uso en mi sistema para mantener la referencia entre la redirección de las conexiones http a nuestro sistema https.


+1 al comentario de inkel anterior.

Aunque si no le importan las especificaciones y solo quiere hacerlo de todos modos, puede evitar el uso de Response.Redirect y, en su lugar, crear los encabezados de las respuestas usted mismo.

Response.StatusCode = 302; //temp redirect Response.Headers.Add("Location", "your/url/here"); Response.Headers.Add("Referer", "something.com"); Response.End();

Esto está fuera de mi cabeza, es posible que necesites tener algunas otras cosas en el encabezado de respuesta.


No sugiero publicar: la mayoría de los sitios web bloquean eso. solo use javascript document.location = ''<%:yourURL%>;''; que cargará automáticamente la nueva página. esto está funcionando bien para mí, porque la respuesta de redireccionamiento no incluye referencia.


Aquí hay una versión de anterior que funciona para mí:

default.asp servername = Lcase(Request.ServerVariables("SERVER_NAME")) Response.Status = "301 Moved Permanently" Response.AddHeader "Location", "http://yoursite" Response.AddHeader "Referer", servername Response.End()


Sé que esto es viejo, pero lo encontré tratando de hacer algo similar.

No quería agregarlo a la URL ya que contaminaba la URL con cosas que no quería allí. Además, no quería que las personas marcaran accidentalmente esa URL. Por lo tanto, utilicé Cookies para agregar mis datos;

string token = vwrApi.GetAuthenticationToken(userId); Response.Cookies.Add(new HttpCookie("VwrAuthorization", token)); Response.Redirect(returnUrl, true);

Por supuesto, esto depende de su capacidad para cambiar el lugar donde el servidor de destino busca la información, pero al menos es otra opción.


Tendrá que emitir una respuesta de estado 307 y establecer el encabezado de la ubicación en el destino al que desea redirigir al usuario. Esto mantendrá intacto el encabezado original del referer [sic].

HttpContext.Current.Response.StatusCode = 307; HttpContext.Current.Response.AddHeader("Location", "http://.com"); HttpContext.Current.Response.End();


Hay un truco de HTML disponible.

<form action="http://url.goes.here" id="test" method="GET"></form> <script type="text/javascript"> document.getElementById("test").submit(); </script>

Si necesita desencadenarlo desde un código subyacente, eso también se puede hacer:

Response.Write( @"<form action=''http://url.goes.here'' id=''test'' method=''GET''></form> <script type=''text/javascript''> document.getElementById(''test'').submit(); </script> ");

Como Inkel podría señalar, esa es una interpretación libre de la especificación de Referer [sic]. Hará lo que quieras sin embargo.