Condivisione delle risorse tra domini GET: 'rifiutato di ottenere un colpo di testa pericoloso ‘ETAG’' dalla risposta
-
26-10-2019 - |
Domanda
Una semplice richiesta GET senza intestazioni personalizzate. La risposta viene restituito come previsto. I dati nel corpo è accessibile, ma non le intestazioni.
Quando provo ad accedere l'intestazione "ETAG", i browser sollevano un'eccezione:
Si sono rifiutati di ottenere pericoloso colpo di testa "ETAG"
Chrome, Safari e Firefox tutto si comportano allo stesso. Non ho prove che su IE.
Che cosa mi manca qui?
Soluzione
Solo intestazioni di risposta semplici sono esposti durante l'uso CORS. intestazioni di risposta semplici sono definiti qui . ETag
non è un semplice intestazioni di risposta. Se si desidera esporre le intestazioni non semplici, è necessario impostare l'intestazione Access-Control-Expose-Headers
, in questo modo:
Access-Control-Expose-Headers: ETag
Si noti tuttavia che ho bug notati in Chrome, Safari e Firefox che impediscono le intestazioni non semplici da essere esposti in modo corretto. Questo può essere risolto ora, non sono sicuro.
Non dovrebbe essere necessario fare una richiesta di verifica preliminare, in quanto verifica preliminare è necessaria solo per i non-GET / metodi HTTP POST o non semplice richiesta ??em> intestazioni (e si stanno chiedendo su risposta header).
Altri suggerimenti
Avete mai provato AJAX 2.0 (Cross condivisione dominio) è una metodologia abbastanza recentemente fatto uscire dal W3C: http://www.w3.org/TR/XMLHttpRequest2/#ref-cors
Inoltre c'è un altro modo di fare questo, che si chiama JSON-P, è come una richiesta JSON, ma è possibile utilizzarlo per il cross-domini: http://en.wikipedia.org/wiki/JSONP
Entrambi può essere molto pericoloso per i responsabili del sito se non configurato correttamente, però. Quindi state attenti quando lo si utilizza.
[PS] Non sono sicuro se questo aiuterà: http://www.w3.org/Protocols/ RFC2616 / RFC2616-sec14.html