Todas las respuestas hasta ahora parecen simplificadas, incompletas o parcialmente incorrectas (el tema es complejo, ¡las cosas están confusamente nombradas y no están bien documentadas!), Así que aquí está mi comprensión:
Para poder reutilizar la conexión creada por <link rel=preconnect>, las cosas dependen de qué tipo de contenido desea obtener, desde dónde, si la solicitud enviará credenciales del navegador (que el navegador puede establecer explícita o implícitamente):
La solicitud es del mismo origen ( example.comsolicitudes de recursos secundarios de example.com)
No hay necesidad de preconnectnada en primer lugar; el navegador mantiene la conexión abierta después de cargar la página durante bastante tiempo. Si hay varias conexiones para abrir, el navegador decide por sí mismo si abrirá y cuántas (dependiendo de si el servidor anuncia soporte HTTP / 2 en protocolo de enlace TLS, configuración del navegador, etc.)
a verificar : ¿qué crossoriginpasa si la solicitud del mismo origen tiene atributo: se usa o se ignora?
La solicitud es de origen cruzado ( example.comsolicitudes de recursos secundarios de another.com)
- si la solicitud real tiene un
crossoriginatributo establecido explícitamente en HTML ( crossOriginen JS, el caso es importante), la preconexión también debe tenerlo, con el mismo valor (tal vez excepto en los casos en que no tiene sentido y crossoriginse ignora, no está completamente claro para yo todavía)
- de lo contrario, si la solicitud es para
<script type=module>: a verificar
- lo demás, si la solicitud es pedido y la "vieja escuela" para
<img>, <style type=stylesheet>, <iframe>, clásico <script>, etc (iniciada a través de HTML o JS) sin crossoriginespecificar de forma explícita , a continuación, el preconnect no debe tener crossoriginestablecido el atributo.
- de lo contrario, si la solicitud es una solicitud de fuente de origen cruzado, la conexión previa debe tener
crossorigin=anonymous
- de lo contrario, si la solicitud es de origen cruzado
fetch o XHR:
- si se realiza en modo con credenciales (es decir, se adjuntan cookies o se usa autenticación básica HTTP; en caso de recuperación, esto significa
credentials !== omit; en caso de XHR withCredentials === true:): la conexión previa debe tenercrossorigin=use-credentials
- si no está en modo con credenciales: la conexión previa debe tener
crossorigin=anonymous
Para el último caso (fetch / XHR), vaya al panel de red en Chrome / Firefox devtools, haga clic derecho en una solicitud y elija copy as fetchde un menú desplegable. Esto creará un fragmento de JS, que le indicará si esa solicitud está habilitada para CORS ( "mode"=="cors") y con credenciales ( "credentials"=="include"|"same-origin").
Sin embargo, tenga en cuenta que el truco anterior no funciona correctamente para solicitudes que no son XHR / fetch, porque, por ejemplo, fetchy <img>use diferentes algoritmos para establecer la conexión, como se explicó anteriormente.
Finalmente, en HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Notas y enlaces adicionales: