Todas as respostas até agora parecem simplificadas, incompletas ou parcialmente erradas (o tópico é complexo, as coisas são nomeadas de forma confusa e não estão bem documentadas!), Então aqui está o meu entendimento:
Para poder reutilizar a conexão criada <link rel=preconnect>, as coisas dependem do tipo de conteúdo que você deseja buscar, de onde, se a solicitação enviará credenciais do navegador (que podem ser estabelecidas pelo navegador de forma explícita ou implícita):
A solicitação é da mesma origem ( example.comsolicita sub -fonte de example.com)
Não há necessidade preconnect, em primeiro lugar; o navegador mantém a conexão aberta após carregar a página por um bom tempo. Se houver várias conexões a serem abertas, o navegador decide por si próprio se e quantas abrir (dependendo se o servidor anunciar suporte HTTP / 2 no handshake TLS, configurações do navegador etc.)
a ser verificado : e se a solicitação de mesma origem tiver crossoriginatributo: é usada ou ignorada?
A solicitação é de origem cruzada ( example.comsolicita o sub-recurso de another.com)
- se a solicitação real tiver um
crossoriginatributo definido explicitamente em HTML ( crossOriginem JS - o caso é importante), a pré-conexão também deve ter, com o mesmo valor (talvez exceto nos casos em que não faz sentido e crossoriginé ignorado - não está totalmente claro para eu ainda)
- caso contrário, se solicitar, se
<script type=module>: a ser verificado
- mais, se o pedido é e "old school" pedido de
<img>, <style type=stylesheet>, <iframe>, clássico <script>etc (iniciada via HTML ou JS) , sem crossoriginexplicitamente especificado , então o preconnect não deve ter crossoriginconjunto de atributos.
- caso contrário, se request for uma fonte de origem , a pré-conexão deverá ter
crossorigin=anonymous
- caso contrário, se a solicitação for de origem cruzada
fetch ou XHR:
- se for feito no modo credenciado (ou seja, os cookies estiverem anexados ou a autenticação básica HTTP for usada; no caso de busca, isso significa
credentials !== omit; no caso de XHR withCredentials === true:): a pré-conexão deve tercrossorigin=use-credentials
- se não estiver no modo credenciado: a pré-conexão deve ter
crossorigin=anonymous
Para o último caso (buscar / XHR), acesse o painel de rede no Chrome / Firefox devtools, clique com o botão direito do mouse em uma solicitação e escolha copy as fetchuma lista suspensa. Isso criará um trecho de JS, que informará se essa solicitação é habilitada para CORS ( "mode"=="cors") e credenciada ( "credentials"=="include"|"same-origin").
Nota no entanto o truque acima não funcionar corretamente para não-XHR / solicitações de busca, porque, por exemplo, fetche <img>usar diferentes algoritmos para estabelecer a conexão, como explicado anteriormente.
Finalmente, em HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Notas e links adicionais: