2014-09-04 10 views

risposta

53

CORS è implementato in modo tale da non infrangere le ipotesi fatte in il pre-CORS, il mondo di sola origine.

Nel mondo pre-CORS, un client può attivare una richiesta di origine incrociata (ad esempio, tramite un tag di script), ma non è in grado di leggere le intestazioni di risposta.

Per garantire che CORS non interrompa questa ipotesi, le specifiche CORS richiedono al server di fornire autorizzazioni esplicite affinché il client possa leggere tali intestazioni (tramite l'intestazione Access-Control-Expose-Headers). In questo modo, le richieste CORS non autorizzate si comportano come hanno fatto in un mondo pre-CORS.

3

Questa è una buona domanda. Guardando attraverso http://www.w3.org/TR/cors/#simple-response-header, non è ovvio perché vorresti o avresti bisogno di farlo.

Le specifiche CORS danno molta importanza all'idea che sia necessario un handshake pre-richiesta in cui il client richiede un tipo di connessione e il server risponde che lo consentirà, quindi potrebbe essere solo un altro aspetto di questo.

Per impostazione predefinita, la lunghezza del contenuto non è un'intestazione consentita quindi mi sono imbattuto nello stesso problema (in seguito quando ho avuto bisogno di accedere a WebDAV e ho dovuto modificare i parametri consentiti) .. CORS davvero non fa un sacco di senso (per me) in primo luogo, quindi non mi sorprenderebbe se le strisce che sono capricciose.

+2

CORS si sente capriccioso proprio perché gli autori delle specifiche si sono preoccupati di pensarci seriamente. CORS deve abilitare le richieste di origine incrociata continuando a proteggere la politica della stessa origine del browser. È la necessità di bilanciare queste due forze (a volte opposte) che rendono le specifiche CORS difficili da comprendere. – monsur

+0

Il link alla raccomandazione è il puntatore più utile che ho ricevuto questo mese e altro ancora. Sapevo di Access-Control-Allow-Headers ma non avevo considerato Access-Control-Expose-Headers e non riuscivo a capire perché i miei header "Links" non arrivassero alla mia collezione Backbone. Astounding. – mcdave

Problemi correlati