Tutte le risposte finora sembrano semplificate, incomplete o parzialmente errate (l'argomento è complesso, le cose hanno un nome confuso e non sono ben documentate!), Quindi ecco la mia comprensione:
Per poter riutilizzare la connessione creata da <link rel=preconnect>, le cose dipendono dal tipo di contenuto che si desidera recuperare, da dove, se la richiesta invierà le credenziali del browser (che possono essere stabilite dal browser in modo esplicito o implicito):
La richiesta è della stessa origine ( example.comrichiede risorse secondarie da example.com)
In preconnectprimo luogo non è necessario affatto; il browser mantiene aperta la connessione dopo aver caricato la pagina per un bel po '. Se ci sono più connessioni da aprire, il browser decide da solo se e quante aprire (a seconda se il server annuncia il supporto HTTP / 2 nell'handshake TLS, nelle impostazioni del browser ecc.)
da verificare : cosa succede se la richiesta della stessa origine ha un crossoriginattributo: viene utilizzata o ignorata?
La richiesta è di origine incrociata ( example.comrichiede risorse secondarie da another.com)
- se la richiesta effettiva ha l'
crossoriginattributo esplicitamente impostato in HTML ( crossOriginin JS - il caso è importante), anche la preconnessione deve averlo, con lo stesso valore (forse tranne nei casi in cui non ha senso e crossoriginviene ignorato - non del tutto chiaro per io ancora)
- altrimenti, se richiesto se per
<script type=module>: da verificare
- altrimenti, se la richiesta è e richiesta di "vecchia scuola" per
<img>, <style type=stylesheet>, <iframe>, classico <script>ecc (avviato tramite HTML o JS) , senza crossoriginesplicitamente specificato , allora il preconnect non deve aver crossoriginimpostato l'attributo.
- altrimenti, se la richiesta è una richiesta di font di origine incrociata , deve essere presente la preconnessione
crossorigin=anonymous
- altrimenti, se la richiesta è di origine incrociata
fetch o XHR:
- se viene eseguito in modalità credenziale (ovvero i cookie sono collegati o viene utilizzata l'autenticazione HTTP di base; in caso di recupero, ciò significa
credentials !== omit; in caso di XHR withCredentials === true:): preconnect deve averecrossorigin=use-credentials
- se non è in modalità credenziale: deve avere la preconnessione
crossorigin=anonymous
Per l'ultimo caso (fetch / XHR), vai al pannello di rete in Chrome / Firefox devtools, fai clic con il pulsante destro del mouse su una richiesta e scegli copy as fetchda un menu a discesa. Questo creerà uno snippet di JS, che ti dirà se quella richiesta è CORS-enabled ( "mode"=="cors") e credentialed ( "credentials"=="include"|"same-origin").
Nota, tuttavia, il trucco di cui sopra non funziona correttamente per le richieste non XHR / fetch, perché ad esempio fetche <img>utilizza algoritmi diversi per stabilire la connessione, come spiegato prima.
Infine, in HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Note e collegamenti aggiuntivi: