Quando viene applicato CORS?

1

Includo alcuni JavaScript RUM (Real User Monitoring) sul sito web di un cliente che restituisce informazioni sulle prestazioni. Mi aspettavo di incontrare problemi CORS, ma sembra che funzioni senza avvertimenti o errori.

Scenario

App - sit.domainC.domainB.domainA.com

Sonda delle prestazioni - probe.domainE.domainD.domainA.com

Il codice JS è ospitato nello stesso dominio dell'app.

  1. Gli utenti visitano l'app e funzionano normalmente
  2. Javascript invia XHR per analizzare i dati sul rendimento

La pagina non viene pubblicata con Access-Control-Allow-Origin quindi non sono sicuro del motivo per cui funziona.

    
posta bcooper 27.11.2015 - 01:20
fonte

1 risposta

2

CORS funziona determinando se il target di richiesta risponde con un'intestazione Access-Control-Allow-Origin (ACAO). In questo caso, l'obiettivo della richiesta è il probe delle prestazioni. Non importa se la pagina viene pubblicata con un'intestazione ACAO.

Da Wikipedia :

Note that in the CORS architecture, the ACAO header is being set by the external web service (bar.com), not the original web application server (foo.com). CORS allows the external web service to authorise the web application to use its services and does not control external services accessed by the web application. For the latter, Content Security Policy should be used (connect-src directive).

Supponendo che la politica della stessa origine sia implementata correttamente, un agente utente (browser) che non supporta CORS produrrà semplicemente un errore quando si effettua una richiesta di origine incrociata.

Un agente utente che supporta CORS effettuerà una richiesta di origine incrociata con l'intestazione Origin contenente un valore del sito da cui è stata inviata la richiesta e si verificherà una delle seguenti situazioni:

  • La risposta non contiene un'intestazione Access-Control-Allow-Origin . In questo caso, il browser produrrà semplicemente un errore poiché il server non consente richieste di origine incrociata.
  • La risposta contiene un'intestazione Access-Control-Allow-Origin con un valore di * . In questo caso, il codice continuerà ad essere eseguito poiché ogni sito può effettuare una richiesta di origine incrociata al server.
  • La risposta contiene un'intestazione Access-Control-Allow-Origin con un elenco di origini. In questo caso, se il sito corrente è presente nell'elenco delle origini, il codice continuerà a essere eseguito poiché è consentito inoltrare una richiesta di origine incrociata al server. In caso contrario, verrà generato un errore.

I punti precedenti sono una leggera semplificazione del processo attuale. Possono esserci più Access-Control-* di intestazioni coinvolte.

Per metodi complessi (ad esempio metodi non semplici) è previsto un passaggio aggiuntivo noto come preflight in cui viene effettuata una richiesta di preflight prima della richiesta effettiva.

Ecco un diagramma di flusso che mostra il processo. La chiamata OPTIONS rappresenta il processo di preflight.

(Immagineutilizzataconautorizzazione,concessainlicenzaCC-BY-SA4.0daBluesmoon [source] )

Puoi leggere ulteriori informazioni su utilizzando CORS su HTML5 Rocks. Anche la specifica CORS è molto utile, sebbene la formulazione sia tecnica perché, dopo tutto, sono le specifiche.

    
risposta data 27.11.2015 - 06:11
fonte

Leggi altre domande sui tag