Obtenir un serveur simple pour afficher une page Web

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"