Quels sont les inconvénients de l’utilisation du traitement HTTP?

Session WWDC 2012 706 – Meilleures pratiques de mise en réseau explique HTTP Pipelining .

  • Par défaut, il est désactivé sur iOS
  • Dans le discours, il l’a décrit comme une énorme victoire de performance.

Pourquoi ne pas vouloir l’utiliser?

pipelining

    Bugs d’implémentation

    Pour que le traitement en pipeline fonctionne, les réponses doivent revenir dans l’ordre où elles ont été demandées. Une implémentation de serveur naïf peut simplement envoyer la réponse dès qu’elle a été calculée. Si plusieurs demandes sont envoyées en parallèle et que la première demande est plus longue à traiter (par exemple, le traitement d’une image plus grande), les réponses seront alors hors service.

    Ceci est un problème pour le client puisque HTTP est un protocole sans état, le client n’a aucun moyen de faire correspondre les demandes avec les réponses. Il dépend de l’ordre dans lequel les réponses sont revenues.

    Un serveur DOIT envoyer ses réponses à ces demandes dans le même ordre que les demandes reçues.

    • Safari a apparemment utilisé le traitement HTTP pour les images au moins. Cela se traduit par un problème de permutation des images .
    • AFNetworking utilisait le pipelining, mais il a été extrait après un problème signalé .
    • Tous les principaux navigateurs (autres qu’Opera) disposent d’un traitement HTTP désactivé ou non implémenté.

    Les problèmes de performance

    Même si le serveur prend correctement en charge le traitement en pipeline, des problèmes de performances peuvent survenir car toutes les requêtes ultérieures doivent attendre que le premier soit terminé (blocage de la tête de ligne).

    • Cet article traite de la perte de performance dans certaines circonstances et d’une éventuelle attaque par déni de service.

    • Cet article suggère également que le pipelining n’est pas une victoire massive.

    • WWDC 2015 – Le réseautage avec NSURLSession explique très bien le blocage de la tête de ligne. (La solution consiste à passer à HTTP 2 qui prend en charge les priorités)

    Chef de blocage de ligne

    Donc, en résumé, les problèmes avec le pipeline HTTP sont les suivants:

    • Certains serveurs et la plupart des serveurs proxy ne le prennent pas en charge. (Peut-être en raison de problèmes de sécurité / fiabilité / ou de performance)
    • Certains serveurs le prennent en charge de manière incorrecte, ce qui peut conduire à des bogues client.
    • Ce n’est pas nécessairement une victoire de performance.
    • Susceptible à la tête de blocage de ligne