一、URL 路径解析
goblog 中 URL 路径解析的代码如下:
http.HandleFunc("/", handlerFunc)
这段代码中反斜杠 / 并不是站点的根目录,而是代表任意路径
我们可以利用此机制来设置多页面访问,修改代码如下:
package main
import (
"fmt"
"net/http"
)
func handlerFunc(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
fmt.Fprint(w, "<h1>Hello, 这里是 goblog</h1>")
} else if r.URL.Path == "/about" {
fmt.Fprint(w, "此博客是用以记录编程笔记,如您有反馈或建议,请联系 "+
"<a href=\"mailto:summer@example.com\">summer@example.com</a>")
} else {
fmt.Fprint(w, "<h1>请求页面未找到 :(</h1>"+
"<p>如有疑惑,请联系我们。</p>")
}
}
func main() {
http.HandleFunc("/", handlerFunc)
http.ListenAndServe(":3000", nil)
}
我们现在有两个问题。
第一个问题是修改代码后都需要手动去 Ctrl+C 停止 go run 命令,再重新运行。效率低下。
第二个问题是 about 页面的解析并不如我们的预想的那样,客户端并没有将内容按照 HTML 格式来解析。
二、### 查看标头信息 什么是 HTTP 标头?
HTTP 请求是无状态的,HTTP 标头是客户端与服务端通讯的重要方式。
设置标头
如何查看标头呢?
访问 learnku.com/ ,网页上右键菜单选择『审查元素』,选中『网络』栏目,为方便区分我们点击前面的小三角形进行折叠:
查看响应标头:
浏览器 localhost:8080 ,右键查看网络请求:
可以看到的我们的 Web 服务器只返回了几个标头,且 Content-Type: 的内容为 text/html; charset=utf-8。
Content-Type 标头
Content-Type: 响应标头是告知客户端内容的类型,客户端再根据这个信息将内容正确地呈现给用户。
常见的内容类型有:
- text/html —— HTML 文档
- text/plain —— 文本内容
- text/css—— CSS 样式文件
- text/javascript —— JS 脚本文件
- application/json—— JSON 格式的数据
- application/xml —— XML 格式的数据
- image/png —— PNG 图片
接下来我们将尝试服务端返回正确的 Content-Type: 标头。
返回正确的 Content-Type:
package main
import (
"fmt"
"net/http"
)
func handlerFunc(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
if r.URL.Path == "/" {
fmt.Fprint(w, "<h1>Hello, 欢迎来到 goblog!</h1>")
} else if r.URL.Path == "/about" {
fmt.Fprint(w, "此博客是用以记录编程笔记,如您有反馈或建议,请联系 "+
"<a href=\"mailto:summer@example.com\">summer@example.com</a>")
} else {
fmt.Fprint(w, "<h1>请求页面未找到 :(</h1>"+
"<p>如有疑惑,请联系我们。</p>")
}
}
func main() {
http.HandleFunc("/", handlerFunc)
http.ListenAndServe(":8080", nil)
}
浏览器访问 localhost:8080/about
如何知道 http 包有哪些接口呢?
那么我们怎么知道 w 对象所代表的 http.ResponseWriter 有哪些接口的呢?
答:看 Go 文档。
如果你觉得我的文档能给你带来帮助,请不要吝啬你的赞哦~~