2011-10-08 14 views
6

Ho un sito Web e il mio server API REST.Rifiutato di ottenere un'intestazione non sicura "Posizione"

Faccio una richiesta di posta elettronica al server REST per creare un nuovo modello. La risposta per questa richiesta sarà la risposta "HTTP/1.1 201 creata" con l'intestazione "Posizione: http://myapi.com/some/path/111" Ma ricevo il messaggio di errore Refused to get unsafe header "Location". So che questo è dovuto al criterio di accesso ai domini incrociati e ad altri bla bla bla.

Qualcuno sa come risolverlo? Forse dovrei aggiungere l'intestazione "Access-Controll-Allow-SOMETHINGHERE" alla risposta?

UPD:

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

originale URI è http://api.mydomain.com/model/ e una nuova posizione URI è http://api.mydomain.com/model/211

originale URI viene utilizzato per la richiesta ajax post, che le risposte con la nuova intestazione Posizione.

+0

Qual è l'URL originale e qual è il nuovo URL di posizione? –

risposta

1

Mi piacerebbe solo aggirarlo, sia restituendo la nuova posizione come valore dalla chiamata o avendo il codice client sapere dove è stato memorizzato l'elemento appena creato.

Un'altra opzione è creare un proxy per le chiamate sul dominio originale.

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

Questo pezzo di codice è completamente sbagliato. Usalo corretto o quasi corretto.

Prova questo:

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

o

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

Se questo non funziona, fatemelo sapere :-)

+1

Grazie Stian, ma so come aggiungere l'header Location con PHP. Il problema è nella politica dei domini incrociati o qualcosa del genere. Ho ricevuto l'errore 'Rifiutato di ottenere un'intestazione non sicura" Posizione "nella console del browser, invece di passare dal nuovo URI. –

4

È perché intestazione posizione non sia esposto a chiamare cliente (in questo caso il tuo codice Ajax) per impostazione predefinita (è 'non sicuro'). Per esporlo devi restituire un'intestazione aggiuntiva:

Access-Control-Expose-Headers: Location 

In questo modo il browser lo esporrà, quindi il client può leggerlo. Puoi aggiungere lì molte intestazioni separate da virgole. Maggiori informazioni su di esso here. Here è possibile leggere quali metodi, i tipi di contenuto delle intestazioni & sono sicuri (semplici) e non richiedono alcuna configurazione aggiuntiva.

0

Per gli upload di Amazon S3 (tramite Dropzone, ad esempio) è necessario nella configurazione CORS.

<ExposeHeader>location</ExposeHeader> 
Problemi correlati