获取一个简单的服务器来显示一个网页
Posted
技术标签:
【中文标题】获取一个简单的服务器来显示一个网页【英文标题】:Getting a simple server to display a web page 【发布时间】:2016-02-26 04:45:30 【问题描述】:我正在编写一个简单的服务器作为一个项目来帮助我学习 Go。这是它的最小形式:
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" +
"<!doctype html>\r\n" +
"<html>...</html>\r\n"
// Greet the user, ignoring their request.
io.WriteString(w, text)
func main()
http.HandleFunc("/", serve)
http.ListenAndServe(":1234", nil)
当客户端连接到localhost:1234
时,它会发送所需的文本。但由于某种原因,我的浏览器根据需要将输出显示为文本而不是 HTML。我做错了什么?
【问题讨论】:
***.com/questions/12830095/… 请记住,HTTP 和 HTML 并不是隐式绑定在一起的。 Go 将尝试检查您的内容的 MIME 类型并适当地设置 Content-Type 标头,但在某些情况下它不能这样做。 【参考方案1】:在编写响应之前,您需要在ResponseWriter
中设置正确的Content-Type
标头。您不需要发送 HTTP 标头,因为它会在第一次调用 Write
时隐式发送,或者通过 WriterHeader
显式发送。
w.Header().Set("Content-Type", "text/html; charset=utf-8")
【讨论】:
哦,我明白了——Go 自己发送 HTTP,而我的 HTTP 是在实际 HTTP 之后传递的。谢谢!【参考方案2】:如果您将在 chrome 检查器的任何替代方案中打开您的页面,您将看到它具有:
Content-Type:text/plain; charset=utf-8
它告诉您的浏览器如何解释它。您可以发送指定内容类型的附加标头:w.Header().Set("Content-Type", "text/html")
或删除所有 GET ...
留下:
text := "<h1>page</h1><span>page2</span>"
【讨论】:
以上是关于获取一个简单的服务器来显示一个网页的主要内容,如果未能解决你的问题,请参考以下文章
.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器