2011-10-08 7 views
6

Tengo un sitio web y mi servidor REST api.Se rehúso a obtener un encabezado inseguro "Ubicación"

Realizo ajax una solicitud posterior al servidor REST para crear un nuevo modelo. La respuesta para esta solicitud será "HTTP/1.1 201 Creado" respuesta con encabezado "Ubicación: http://myapi.com/some/path/111" Pero recibo el mensaje de error Refused to get unsafe header "Location". Sé que esto se debe a la política de acceso de dominio cruzado y otros bla bla bla.

¿Alguien sabe cómo solucionarlo? ¿Tal vez tengo que agregar el encabezado "Access-Controll-Allow-SOMETHINGHERE" a la respuesta?

UPD:

URL del sitio Web http://www.mydomain.com/

URI original es http://api.mydomain.com/model/ y la nueva ubicación URI es http://api.mydomain.com/model/211

URI original se utiliza para la petición ajax puesto, que las respuestas con nueva cabecera Location.

+0

¿Cuál es la URL original y cuál es la nueva URL de ubicación? –

Respuesta

1

Me gustaría solucionar el problema, ya sea devolviendo la nueva ubicación como un valor de la llamada o haciendo que el código del cliente sepa dónde se almacena el elemento recién creado.

Otra opción es crear un proxy para las llamadas en el dominio original.

0
header Location: http://myapi.com/some/path/111" 

Ese código es completamente incorrecto. Úselo correcto o casi corregido.

Prueba esto:

header("Location: http://myapi.com/some/path/111"); 

o

header("Location: http://myapi.com/some/path/111"); exit(); 

Si esto no funciona, que me haga saber :-)

+1

Gracias, Stian, pero sé cómo agregar el encabezado de ubicación con PHP. El problema está en la política de dominio cruzado o algo así. Recibo el error 'Rehusé a obtener el encabezado inseguro" Ubicación "' en la consola del navegador, en lugar de pasar por un nuevo URI. –

4

Se debe a que la ubicación de cabecera no está expuesto a llamar cliente (en este caso de su código ajax) por defecto (es 'inseguro'). Para exponerlo, debe devolver un encabezado adicional:

Access-Control-Expose-Headers: Location 

Este navegador de manera lo expondrá, para que el cliente pueda leerlo. Puede agregar multiplicar encabezados separados por comas. Más sobre esto here. Here puede leer qué métodos, encabezados & tipos de contenido son seguros (simples) y no requieren ninguna configuración adicional.

0

Para las cargas de Amazon S3 (a través de Dropzone por ejemplo) necesita esto en su configuración de CORS.

<ExposeHeader>location</ExposeHeader> 
Cuestiones relacionadas