J’écris un simple serveur en tant que projet pour m’aider à apprendre Go. Voici sa forme minimale:
package main import ( "io" "net/http" ) func serve(w http.ResponseWriter, r *http.Request) { text := "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n" + "Host: localhost:1234\r\n" + "Connection: close\r\n" + "\r\n" + "\r\n" + "...\r\n" // Greet the user, ignoring their request. io.WriteSsortingng(w, text) } func main() { http.HandleFunc("/", serve) http.ListenAndServe(":1234", nil) }
Cela fonctionne comme prévu en termes qu’il envoie le texte désiré quand un client se connecte à localhost:1234
. Mais pour une raison quelconque, mon navigateur affiche la sortie sous forme de texte au lieu de HTML, comme vous le souhaitez. Qu’est-ce que je fais mal?
Vous devez définir l’en Content-Type
tête Content-Type
approprié dans ResponseWriter
avant d’écrire la réponse. Vous n’avez pas besoin d’envoyer l’en-tête HTTP, car celui-ci est envoyé implicitement lors du premier appel à Write
ou explicitement via WriterHeader
.
w.Header().Set("Content-Type", "text/html; charset=utf-8")
Si vous ouvrez votre page dans une alternative de chrome inspector, vous verrez qu’il a:
Content-Type:text/plain; charset=utf-8
Ce qui indique à votre navigateur comment l’interpréter. Vous pouvez envoyer un en-tête supplémentaire en spécifiant le type de contenu: w.Header().Set("Content-Type", "text/html")
ou supprimez tout ce que vous GET ...
laissant juste:
text := "page
page2"