jquery - resource - origin ''http://localhost:4200'' is therefore not allowed access. angular
OPCIONES de verificación previa superrápida solo en Chrome (2)
He estado intentando depurar esto y parece ser un error de Chrome porque estábamos experimentando el mismo problema.
Como referencia, he archivado un informe de error en cromo aquí: CORS antes del vuelo y las solicitudes posteriores son muy lentas solo en Chrome
Estoy agregando esto aquí para ayudar a evitar que más desarrolladores pasen medio día investigando;) Se actualizará como aquí más desde Chromium.
La descripción del informe de error sigue:
Agente de usuario:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Pasos para reproducir el problema:
- Tener app.domain.com
- Artículo de lista
- Tener api.domain.com
- Habilitar CORS en la API para habilitar el acceso
- Verifique las respuestas en DevTools, vea OPCIONES y las solicitudes GET están tomando hasta 300ms +
¿Cuál es el comportamiento esperado?
Los tiempos de respuesta deben ser precisos.
¿Qué salió mal?
Estamos utilizando Go microservicios y notamos una gran disparidad en el tiempo empleado entre los navegadores, siendo el cromo el más lento hasta una magnitud de 100x.
cuando hemos comprobado los tiempos desde el servidor, las respuestas tardan como máximo 10 ms, y la mayoría es inferior a 1 ms. Al verificar el tiempo en devtools, las mismas respuestas entraban a ~ 100ms ~ 1s.
¿Esto funcionó antes?
N / A
Versión de Chrome: 63.0.3239.132 Canal: versión estable del sistema operativo: 10.0 Versión Flash:
En Firefox (y en cualquier otro navegador), las mismas solicitudes vuelven en ~ 1-20ms como se esperaba.
Al tratar de diagnosticar aún más, utilizamos el Fiddler de Telerik para verificar los tiempos reales de respuesta de la red y confirmamos que Chrome los enviaba y los recibía dentro de los tiempos previstos. La única conclusión a la que podríamos llegar es que algo interno de Chrome está ralentizando el procesamiento de estas solicitudes.
Probamos todas las permutaciones de chrome://flags#out-of-blink-cors
y chrome://flags#enable-site-per-process
, que son las dos opciones que detectamos que parecen vagamente relevantes. Nada parecía ayudar.
También encontramos muchos artículos de Stack Overflow sobre problemas similares que hacen que se mencione que se trata de un error de Chrome, pero no he podido encontrarlo aquí.
- OPCIONES de verificación previa superrápida solo en Chrome
- https://github.com/corydolphin/flask-cors/issues/147
- Precisión lenta de cors OPCIONES en Chrome
Acabamos de probar Chrome en MacOS y no parece ser un problema, por lo que puede estar limitado a Windows.
He estado luchando recientemente con un problema súper extraño que solo sucede en Chrome: como mi API (NodeJS) está en un subdominio diferente, necesito usar CORS para acceder desde mi interfaz (EmberJS).
Está funcionando bastante bien, pero con mucha frecuencia (95% de las veces) tengo consultas OPTIONS muy muy lentas, lo que retrasa las llamadas a la API en aproximadamente 3 segundos.
La mayor parte de este tiempo se gasta en descargar un contenido vacío:
Se vuelve aún más extraño cuando intento esto en otro sitio web que creamos usando una arquitectura similar, experimentando exactamente el mismo problema.
Algunas otras cosas que intenté:
- He estado intentando esto con Firefox y Safari, y no tuve ningún retraso.
- He estado intentando esto localmente o en producción, experimentando el mismo retraso.
- He estado probando esto con el modo incógnito (sin extensiones), y tengo exactamente el mismo problema.
Estamos usando NodeJS de fondo con el paquete CORS .
Ahora, no tengo idea si el problema está en Chrome 60, NodeJS, el paquete CORS o EmberJS + jQuery.
Alguien experimentado esto también?
Solo como una nota: parece un error de cromo
Reproduje el problema usando un servidor con dos nombres DNS usando un servicio en un dominio único
https://domain1.com --> https://domain1.com (No CORS, no delay)
https://domain2.com --> https://domain1.com (CORS, delay)
Es exactamente el mismo servicio que responde a dos nombres, por lo que estoy probando exactamente el mismo código de solicitud, cliente y servidor (los nombres DNS son intercambiables)
Probado con
- Chrome 61.0.3163.100 (Windows) -> DELAY
- Chrome 62.0.3202.84 (Android) -> DELAY
- Chrome 62.0.3202.84 (iOS-Ipad) -> ¡¡¡OK !!!
- Firefox -> OK
- Edge -> Aceptar
Solución (en mi caso). Crear un proxy en mi host para responder al mismo DNS de origen y evitar CORS