一个绑定在 8081 端口
上一篇文章中,我们介绍了请求的布局与措置惩罚惩罚。本文将详细介绍如何响应客户真个请求。其实在前面几篇文章中,我们已经使用过响应的成果——通过http.ResponseWriter发送字符串给客户端。
但是这种方法仅限于发送字符串。本文我们将介绍如何定制响应的参数。
如果你看了我前面几篇文章,应该对措置惩罚惩罚器和措置惩罚惩罚器函数都非常熟悉了。措置惩罚惩罚器函数即拥有以下签名的函数:
func (w http.ResponseWriter, r *http.Request)这里的ResponseWriter其实是界说在net/http包中的一个接口:
// src/net/http/ type ReponseWriter interface { Header() Header Write([]byte) (int, error) WriteHeader(statusCode int) }我们响应客户端请求都是通过该接口的 3 个要领进行的。例如之前fmt.Fprintln(w, "Hello World")其实底层挪用了Write要领。
收到请求后,多路复用器会自动创建一个http.response东西,它实现了http.ResponseWriter接口,然后将该东西和请求东西作为参数传给措置惩罚惩罚器。那为什么请求东西使用的时布局指针*http.Request,而响应要使用接口呢?
实际上,请求东西使用指针是为了能在措置惩罚惩罚逻辑中便利地获取请求信息。而响应使用接口来操纵,一方面底层也是东西指针,可以生存改削。另一方面,我认为是为了扩展性。可以很便利地用新的实现替换而不用改削应用层代码,即措置惩罚惩罚器接口不用改削。例如,Go 标准库供给了一个测试 HTTP 请求的工具包net/http/httptest。它界说了一个ResponseRecorder布局,该布局实现了接口http.ResponseWriter。这个布局不将写入的数据发送给客户端,而是将数据记录下来,便利测试断言。
接口ResponseWriter有 3 个要领,下面依次来介绍如何使用:
Write;
WriteHeader;
Header。
Write要领由于接口ResponseWriter拥有要领Write([]byte) (int, error),所以实现了ResponseWriter接口的布局也实现了io.Writer接口:
// src/io/io.go type Writer interface { Write(p []byte) (n int, err error) }这也是为什么http.ResponseWriter类型的变量w能不才面代码中使用的原因(fmt.Fprintln的第一个参数接收一个io.Writer接口):
fmt.Fprintln(w, "Hello World")我们也可以直接挪用Write要领来向响应中写入数据:
func writeHandler(w http.ResponseWriter, r *http.Request) { str := `<html> <head><title>Go Web 编程之 响应</title></head> <body><h1>直接使用 Write 要领<h1></body> </html>` w.Write([]byte(str)) } mux.HandleFunc("/write", writeHandler)下面,我们介绍一个工具curl来测试我们的 Web 应用。由于浏览器只会展示响应中主体的内容,其它元信息需要进行一些操纵才华检察,不够直不雅观。curl是一个 Linux 命令行措施,可用来倡议 HTTP 请求,成果非常强大,如设置首部/请求体,展示响应首部等。
凡是 Linux 系统会自带curl命令。简单介绍几种 Windows 上安置curl的方法。
直接在curl官网下载可执行措施,下载完成后放在PATH目录中即可在Cmd或Powershell界面中使用;
Windows 供给了一个软件承打点工具chocolatey,可以安置/更新/删除 Windows 软件。安置chocolatey后,直接在Cmd或Powershell界面执行以下命令即可安置curl,也对照便利:
choco install curl我想作为措施员,每小我私家都应该熟悉git。安置git for windows后,就可以直接在Git Bash中使用curl命令。实际上,git for windows使用了mingw来在 Windows 上模拟 Linux 环境。它供给了很多 Linux 命令的 Windows 版本,非常保举使用。
启动处事器,使用下面命令测试Write要领:
curl -i localhost:8080/write选项-i的感化是显示响应首部。该命令返回:
HTTP/1.1 200 OK Date: Thu, 19 Dec 2019 13:36:32 GMT Content-Length: 113 Content-Type: text/html; charset=utf-8 <html> <head><title>Go Web 编程之 响应</title></head> <body><h1>直接使用 Write 要领<h1></body> </html>可以看出很清晰地看出响应的各个部分。也可以继续使用浏览器来测试:
但是如果要检察首部,状态码等信息就必需使用浏览器的开发者工具了。Chrome 的开发者工具可以通过 F12 唤出,然后切换到Network标签,点击刚刚发送的请求:
我们看到上面红色的两个部分为响应的元信息,下面的绿色部分为请求的根基信息。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31658.html
- 上一篇:asp.net设置允许跨域
- 下一篇:那么你的网站被劫持了