Me gustaría incluir algunas sugerencias de recursos de preconexión en mi sitio para que los navegadores puedan (por ejemplo) conectarse al jQuery CDN antes de que realmente vean la etiqueta del script que invoca el CDN. No estoy seguro de si debo incluir el atributo "crossorigin" o cuál debería ser su valor. La especificación dice, en parte,
Para iniciar una preconexión, el agente de usuario debe ejecutar estos pasos:
[...]
- Deje que corsAttributeState sea el estado actual del
crossoriginatributo de contenido del elemento .- Deje que las credenciales sean un valor booleano establecido en
true.- Si corsAttributeState es
Anonymousy el origen no es igual al origen del documento actual, establezca las credenciales enfalse.- Intente obtener conexión con el origen y las credenciales .
No sé cómo interpretar este algoritmo. Si me estoy conectando previamente a un CDN, lo que permitirá que cualquiera descargue su contenido sin ningún tipo de credenciales, ¿qué valor debo usar para el atributo "crossorigin"?
html
performance
cross-origin
Bdesham
fuente
fuente

Respuestas:
Estaba buscando lo mismo y encontré esto
Establece aquí que si no utiliza el atributo de origen cruzado, el agente de usuario solo realiza la búsqueda de DNS pero no establece conexión con el dominio en particular. Por lo tanto, el atributo crossorigin es necesario si tiene que conectarse previamente al dominio cruzado, así:
Además, si desea enviar algunas credenciales a ese dominio cruzado en particular, puede establecer el valor para el origen cruzado, ya
crossorigin = use-credentialsque de lo contrario creo que el valor predeterminado es anónimo.fuente
crossorigindesperdiciará una conexión de manera similar, porque se debe abrir una nueva conexión no usa CORS.Hasta ahora entiendo el uso de
crossorigin, especialmente en términos de sus valoresanonymousyuse-credentials, debe usarcrossorigin="use-credentials"en caso de que:Además de la documentación citada por usted, obtuve esto y aquello . Pero, de hecho, la documentación es engañosa y contiene errores ortográficos: el primero lo llama
use-credentials, el segundo -user-credentials.De todos modos, en mi entendimiento:
crossorigindel todo igualcrossorigin="anonymous"crossorigines igualcrossorigin="use-credentials"Tal vez alguien me corregiría.
PD : La versión actual de la página de Mozilla para el tema significa:
Medios: no,
crossoriginen absoluto,crossoriginocrossorigin="use_credentials"todos se manejan comocrossorigin="anonymous".fuente
crossorigines igual acrossorigin="anonymous".Depende de dos cosas:
Para jQuery, no lo usarías
crossorigin. Los scripts no se encuentran entre los tipos de recursos que los navegadores usan CORS para descargar .Las fuentes, por otro lado, usan CORS.
crossoriginatributo.crossorigin. SiAquí está la publicación de Stack Overflow donde encontré el mismo problema.
No me he zambullido cuando las credenciales de CORS son necesarias. No he visto un ejemplo en el que se necesiten, por lo que es probable que esté seguro
crossorigin(es decir, `crossorigin =" anónimo ").fuente
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 deexample.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 deanother.com)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 ycrossoriginse ignora, no está completamente claro para yo todavía)<script type=module>: a verificar<img>,<style type=stylesheet>,<iframe>, clásico<script>, etc (iniciada a través de HTML o JS) sincrossoriginespecificar de forma explícita , a continuación, el preconnect no debe tenercrossoriginestablecido el atributo.crossorigin=anonymousfetchoXHR:credentials !== omit; en caso de XHRwithCredentials === true:): la conexión previa debe tenercrossorigin=use-credentialscrossorigin=anonymousPara 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:
fuente