Maison >développement back-end >Golang >Comment envoyer des réponses HTTP fragmentées à partir d'un serveur Go ?

Comment envoyer des réponses HTTP fragmentées à partir d'un serveur Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-01 19:50:11659parcourir

How to Send Chunked HTTP Responses from a Go Server?

Envoyer une réponse HTTP fragmentée à partir d'un serveur Go

Solution :

Pour envoyer une réponse fragmentée Réponses HTTP d'un serveur Go et les recevoir en temps réel, il est nécessaire d'invoquer Flusher.Flush() après avoir écrit chaque bloc de données. Cela déclenche le codage « fragmenté » et envoie immédiatement le fragment au client. Voici un exemple de la façon de mettre en œuvre ceci :

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "time"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        flusher, ok := w.(http.Flusher)
        if !ok {
            panic("expected http.ResponseWriter to be an http.Flusher")
        }
        w.Header().Set("X-Content-Type-Options", "nosniff")
        for i := 1; i <= 10; i++ {
            fmt.Fprintf(w, "Chunk #%d\n", i)
            flusher.Flush() // Trigger "chunked" encoding and send a chunk...
            time.Sleep(500 * time.Millisecond)
        }
    })

    log.Print("Listening on localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Vérification :

À l'aide de telnet, vous pouvez vous connecter au serveur et assister à l'envoi de la réponse fragmentée :

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Tue, 02 Jun 2015 18:16:38 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked

9
Chunk #1

9
Chunk #2

...

Supplémentaire Remarques :

  • Il vaut la peine de rechercher si http.ResponseWriters prend en charge l'accès simultané pour une utilisation simultanée par plusieurs goroutines.
  • Pour plus d'informations sur les "X-Content-Type-Options " en-tête, consultez cette question connexe.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn