web-dev-qa-db-fra.com

Diffusion de contenu compressé pour Go

Je commence à écrire des applications côté serveur dans Go. Je voudrais utiliser l'en-tête de demande Accept-Encoding pour déterminer s'il faut GZIP l'entité de réponse. J'avais espéré trouver un moyen de le faire directement en utilisant les méthodes http.Serve ou http.ServeFile.

Il s'agit d'une exigence assez générale; ai-je oublié quelque chose ou dois-je lancer ma propre solution?

41
Rick-777

Il n'y a pas encore de support "prêt à l'emploi" pour les réponses HTTP compressées par gzip. Mais l'ajouter est assez trivial. Jettes un coup d'oeil à

https://Gist.github.com/the42/1956518

aussi

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/cgUp8_ATNtc

23
rputikar

Le New York Times a publié son package middleware gzip pour Go .

Vous passez juste votre http.HandlerFunc par le biais de leur GzipHandler et vous avez terminé. Cela ressemble à ceci:

package main

import (
    "io"
    "net/http"
    "github.com/nytimes/gziphandler"
)

func main() {
    withoutGz := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "text/plain")
        io.WriteString(w, "Hello, World")
    })

    withGz := gziphandler.GzipHandler(withoutGz)

    http.Handle("/", withGz)
    http.ListenAndServe("0.0.0.0:8000", nil)
}
24
Moshe Revah