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
crossorigin
atributo de contenido del elemento .- Deje que las credenciales sean un valor booleano establecido en
true
.- Si corsAttributeState es
Anonymous
y 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-credentials
que de lo contrario creo que el valor predeterminado es anónimo.fuente
crossorigin
desperdiciará 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 valoresanonymous
yuse-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:
crossorigin
del todo igualcrossorigin="anonymous"
crossorigin
es 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,
crossorigin
en absoluto,crossorigin
ocrossorigin="use_credentials"
todos se manejan comocrossorigin="anonymous"
.fuente
crossorigin
es 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.
crossorigin
atributo.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.com
solicitudes de recursos secundarios deexample.com
)No hay necesidad de
preconnect
nada 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é
crossorigin
pasa si la solicitud del mismo origen tiene atributo: se usa o se ignora?La solicitud es de origen cruzado (
example.com
solicitudes de recursos secundarios deanother.com
)crossorigin
atributo establecido explícitamente en HTML (crossOrigin
en 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 ycrossorigin
se 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) sincrossorigin
especificar de forma explícita , a continuación, el preconnect no debe tenercrossorigin
establecido el atributo.crossorigin=anonymous
fetch
oXHR
:credentials !== omit
; en caso de XHRwithCredentials === true
:): la conexión previa debe tenercrossorigin=use-credentials
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 fetch
de 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,
fetch
y<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