Avant de parler du push serveur HTTP/2, il faut d'abord savoir que HTTP/2 est conçu pour résoudre de nombreuses lacunes de HTTP/1.x. Les pages Web contemporaines utilisent de nombreuses ressources : HTML, feuilles de style, scripts, images, etc. Dans HTTP/1.x, chacune de ces ressources doit être demandée explicitement. Cela peut être un processus lent. Ainsi, le navigateur commence par obtenir le code HTML, puis obtient progressivement plus de ressources au fur et à mesure qu'il analyse et évalue la page. Étant donné que le serveur doit attendre que le navigateur fasse chaque requête, le réseau est souvent inactif et sous-utilisé.
Pour améliorer la latence, HTTP/2 a introduit le push serveur, qui permet au serveur de transmettre des ressources au navigateur avant que celui-ci ne les demande explicitement. Un serveur sait souvent qu'une page nécessite de nombreuses ressources supplémentaires et peut commencer à pousser ces ressources lorsqu'il répond à la première requête du navigateur. Cela permet au serveur d'utiliser pleinement un réseau potentiellement inactif, améliorant ainsi les temps de chargement des pages.
serverpush.svg.png
Au niveau de la couche de protocole, le push du serveur HTTP/2 est piloté par les trames push_promise Un PUSH_PROMISE décrit une requête, c'est-à-dire un serveur. côté navigation prédictive Le serveur émettra la requête immédiatement. Dès que le navigateur reçoit le PUSH_PROMISE, il sait immédiatement que le serveur va transférer cette ressource. Si le navigateur découvre par la suite qu'il a besoin de la ressource, il attendra la fin du push plutôt que d'envoyer une nouvelle requête. Cela réduit le temps que le navigateur passe à attendre le réseau.
Serveur push dans le package net/http
go1.8 introduit la prise en charge des réponses push de http.Server. Cette fonctionnalité est disponible si le serveur en cours d'exécution est un service HTTP/2 et que les connexions entrantes utilisent HTTP/2. Dans n'importe quel gestionnaire HTTP, vous pouvez déterminer si http.ResponseWriter prend en charge le serveur push en vérifiant s'il implémente la nouvelle interface http.Pusher.
Par exemple, si le serveur sait que app.js va être demandé pour afficher la page, le gestionnaire peut lancer un push si http.Pusher est disponible.
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if pusher, ok := w.(http.Pusher); ok { // Push is supported. if err := pusher.Push("/app.js", nil); err != nil { log.Printf("Failed to push: %v", err) } } // ... })
Je pense que vous maîtrisez la méthode après avoir lu l'introduction ci-dessus. Pour des informations plus intéressantes, veuillez faire attention au site Web php chinois Autres articles connexes !
Lecture connexe :
À quoi ressemble le moteur JS lorsqu'il est exécuté
Comment le JS natif implémente AJAX et JSONP
Comment personnaliser l'objet console lors de l'utilisation de JS
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!