获取一个简单的服务器来显示一个网页

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>"

【讨论】:

以上是关于获取一个简单的服务器来显示一个网页的主要内容,如果未能解决你的问题,请参考以下文章

如何用python写爬虫来获取网页中所有的文章以及关键词

如何用html编写一个简单的网页

.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

如何让手机访问电脑本地服务器的网页---超简单

简单 PHP + MySQL 数据库动态网站制作 -- 摘抄

网页 使用js或jQuery实现 显示的文本变成输入框以供修改