Stavo cercando le specifiche ragioni di sicurezza sul motivo per cui questo è stato aggiunto. Era una specie di momento WTH quando stavo implementando cors e potevo vedere tutte le intestazioni restituite ma non potevo accedervi tramite javascript ..Perché sono necessarie le intestazioni di Access-Control-Expose?
risposta
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.
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.
- 1. Perché le parentesi sono necessarie nelle tuple?
- 2. Le intestazioni Python sono necessarie per costruire Mercurial
- 3. Quando sono necessarie le interfacce?
- 4. Perché sono necessarie le vite esplicite in Rust?
- 5. Le tabelle delle relazioni sono davvero necessarie?
- 6. Perché Oracle Sql * Plus stampa molte intestazioni non necessarie?
- 7. Le virgole sono necessarie in Node.js?
- 8. Perché le parentesi tonde non sono necessarie per gli atomi che sono operatori con priorità alta?
- 9. MSDTC - Quante porte sono necessarie
- 10. Le risorse/icone LDPI Android sono ancora necessarie?
- 11. Quali chiavi sono necessarie per CNContactFormatter?
- 12. Perché utilizzare le intestazioni precompilate (C/C++)?
- 13. Quali autorizzazioni sono necessarie per eseguire Magento?
- 14. Sono necessarie alcune spiegazioni su Distribution.TestSuite
- 15. Le intestazioni XSRF non sono impostate in AngularJS
- 16. C++ trovare le parti necessarie del codice
- 17. Quali caratteristiche linguistiche sono necessarie per lo scripting di giochi?
- 18. Sono necessarie estensioni di file nei tag <img>?
- 19. Le parentesi graffe non necessarie riducono le prestazioni?
- 20. Perché NuGet scarica dipendenze apparentemente non necessarie?
- 21. Perché i byte interi sono memorizzati all'indietro? Questo vale solo per le intestazioni?
- 22. Symfony2: impossibile avviare la sessione perché le intestazioni sono già state inviate
- 23. Sono possibili le intestazioni numerate in Markdown/Rdiscount?
- 24. Perché la codifica e la decodifica sono necessarie per qualsiasi linguaggio di programmazione/database?
- 25. Le intestazioni HTTP (Content-Type, & c.) Sono case-sensitive?
- 26. Le funzioni definite nelle intestazioni sono garantite come inline?
- 27. Sono necessarie due caselle di testo, una o entrambe.
- 28. Quali parti di Windows SDK sono necessarie per eseguire sn.exe
- 29. Perché le proprietà di dipendenza sono "statiche"?
- 30. perché le chiamate di prelievo sono costose?
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
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