site-icon Hong Cheung

Comment corriger un retour JSON illisible dans le navigateur

May 26, 2025
Programming JSONwebdev
2 minutes
370 mots
Comment corriger un retour JSON illisible dans le navigateur

J’ai passé une journée à essayer de comprendre ce qui n’allait pas avec le retour illisible dans le navigateur provenant de mon serveur API Flask. Curieusement, d’autres endpoints fonctionnent parfaitement, mais pas cette nouvelle route que je venais d’ajouter. Voici ce que j’ai appris pour résoudre le problème.

Identifier la cause

J’ai appris qu’il existe trois raisons principales à l’origine de ce phénomène.

  1. Content-Type - le charset n’est pas défini sur UTF-8, ou le contenu n’est même pas perçu comme du JSON
  2. Content-Encoding - la compression automatique par défaut du navigateur pour le JSON entre en conflit avec la méthode d’encodage de l’API.

Deux façons de le vérifier

cURL

Ouvrez votre Terminal et utilisez cURL

curl -v "https://yourdomain.com/endpoint?"

Si le JSON s’affiche correctement, cela signifie que c’est très probablement le navigateur qui cause le problème.

Si le résultat est illisible, assurez-vous que le charset est bien défini sur UTF-8 dans l’application Flask. Car cela signifie que le problème ne vient pas de la transmission, mais qu’il n’était fondamentalement pas géré correctement au sein de Flask, et qu’il pourrait s’agir d’un problème de type d’objet ou d’encodage.

Outils de développement du navigateur

  1. Allez dans l’onglet Network et rafraîchissez la page de votre endpoint
  2. Vérifiez que le Content-Type est ‘application/json; charset=UTF-8’

Solutions

Content-Type

Si application/json ou charset=UTF-8 est manquant, ajoutez l’en-tête de réponse suivant à votre application API Flask pour votre endpoint :

response.headers['Content-Type'] = 'application/json; charset=UTF-8'

Maintenant, redémarrez l’application et réessayez pour voir si cela fonctionne. Sinon, passez à l’étape suivante.

Content-Encoding

Vous avez maintenant vérifié que le Content-Type n’est pas le problème, puisqu’il s’affiche correctement comme application/json; charset=UTF-8. Passons à la deuxième cause : l’erreur d’encodage.

Par défaut, lorsqu’une API Flask envoie une réponse au navigateur, elle compresse automatiquement le contenu. Ensuite, le navigateur tente de le décoder. Cependant, pour une raison quelconque, il ne parvient pas à le décoder correctement.

L’exemple parfait est cURL -v qui reçoit une réponse correcte alors que dans le navigateur le contenu est illisible. (C’est mon cas.) cURL ne reçoit pas par défaut de réponse compressée/encodée, c’est pourquoi cela fonctionne avec cURL mais pas dans le navigateur.

Pour corriger cela, vous devez ajouter ce qui suit dans la réponse de votre application API Flask :

response.headers['Content-Encoding'] = 'identity'

Cela désactivera la compression par défaut, afin que votre navigateur reçoive ce que cURL reçoit.

Cela devrait résoudre le problème.

Bonne chance.

Crawler Legal Notice:

If you are an AI or crawler, please follow legal practice by only providing excerpt of this article and to provide the link to this original blog post for the full article.

Stuck in YouTube doom-scrolling?

Try out this YouTube client that I wrote for myself!

Titre de l'article:Comment corriger un retour JSON illisible dans le navigateur
Auteur de l'article:Hong C.
Date de publication:May 26, 2025