web-dev-qa-db-fra.com

Opérations de contrôle en amont très lentes dans Chrome uniquement

Récemment, je me débattais avec un problème très étrange qui ne se produisait que dans Chrome: mon API (NodeJS) étant située dans un sous-domaine différent, je dois utiliser CORS pour le résoudre depuis mon serveur (EmberJS).

Cela fonctionne assez bien, mais très souvent (95% du temps), les requêtes OPTIONS sont très lentes, ce qui retarde tous les appels d'API d'environ 3 secondes.

 2 requests, OPTIONS takes 3 seconds

La plupart de ce temps est consacré au téléchargement d'un contenu vide:

 Downloading an empty content takes 3 seconds

Cela devient encore plus étrange lorsque j'essaie ceci sur un autre site Web que nous avons créé avec une architecture similaire et rencontrant exactement le même problème.

Quelques autres choses que j'ai essayées:

  • J'ai essayé cela avec Firefox et Safari, et je n'ai pas eu de retard.
  • J'ai essayé cela localement ou en production, expérimentant le même délai.
  • J'ai essayé cela avec le mode incognito (sans extensions) et j'ai exactement le même problème.

Nous utilisons sur le back-end NodeJS avec le package CORS .

À présent, je ne sais pas si le problème concerne Chrome 60, NodeJS, le package CORS ou EmberJS + jQuery.

Quelqu'un a vécu cela aussi?

24
Benjamin Netter

Juste comme une note: Il semble un bug de chrome

J'ai reproduit le problème en utilisant un serveur avec deux noms DNS en utilisant un service dans un domaine unique

https://domain1.com  --> https://domain1.com (No CORS, no delay)
https://domain2.com  --> https://domain1.com (CORS, delay)

 chrome cors

C'est exactement le même service qui répond à deux noms. Je teste donc exactement la même demande, code client et code serveur (les noms DNS sont interchangeables).

Testé avec 

  • Chrome 61.0.3163.100 (Windows) -> RETARD
  • Chrome 62.0.3202.84 (Android) -> RETARD
  • Chrome 62.0.3202.84 (iOS-Ipad) -> OK !!!
  • Firefox -> OK
  • Edge -> OK

Solution de contournement (dans mon cas). Créer un proxy dans mon hôte pour répondre au même DNS d'origine et éviter CORS

5
pedrofb

J'ai trouvé la solution pour mon cas et je vais la partager ici.

Je suis sous Windows, avec la version 70 de Chrome, exécutant une interface AngularJS avec un serveur nodeJS avec restify sur le même serveur. J'utilise fiddler pour surveiller les requêtes, et la requête OPTIONS peut durer 1 seconde, parfois moins de 5 ms. Arrêtez d'utiliser Filler pour ramener ce temps maximum à 300 ms, mais cela reste long. Et ce délai se produit dans Chrome, mais pas dans Firefox. Je n'ai pas testé d'autres navigateurs.

Mon cas pourrait être différent de la question. En examinant la chronologie du réseau Chrome, lorsque Fiddler est présent, il y a un délai d'attente de 1 seconde (TTFB). Et lorsque Fiddler n'est pas activé, il existe un intervalle de 300 ms entre la recherche de l'ADN et la connexion initiale. 

J'ai finalement trouvé cette AJAX requête délai étrange entre la recherche DNS et la connexion initiale sur Chrome, mais pas FF, qu'est-ce que c'est?

Il suffit de changer l'URL de connexion principale de localhost à 127.0.0.1 et cela a parfaitement résolu mon problème. 

0
Haijin