go http请求返回html_Go 语言 Web 编程——通过 ResponseWriter 接口创建 HTTP 响应

1、HTTP 响应报文结构

前面几篇教程我们了解了如何在 Go 语言中解析用户请求信息,包括表单字段和文件上传,接下来,我们来看看处理完请求后,如何将响应发送给客户端。HTTP 响应的报文结构如下所示:

451c7074aa2482ed77cb2af58d354a27.png

HTTP 响应报文结构

和 HTTP 请求报文结构类似,响应报文也可以分为三部分:状态行、响应头(首部字段)和响应主体。

首先是状态行,在状态行中包含了 HTTP 协议版本和响应状态码,200 OK 表示响应成功,更多状态码信息(常见的有 404、403、500、301 等)可以网上查看下 HTTP 协议或者阅读 HTTP 响应状态码这篇文章了解。

然后是响应头,其中包含了 HTTP 响应的首部字段,比如内容类型/编码、缓存控制、Cookie 信息等。

最后是响应实体,对于 API 接口来说,通常就是返回的 XML/JSON 格式数据,对于 HTML 视图响应,就是一个标准的 HTML 文档,如上图所示。响应头和响应报文之间通过两个换行符分隔。

2、ResponseWriter 接口

在 Go 语言中,客户端请求信息都封装到了 Request 对象,但是发送给客户端的响应并不是 Response 对象,而是 ResponseWriter:

func Home(w http.ResponseWriter, r *http.Request)  {    io.WriteString(w, "Welcome to my blog site")}

ResponseWriter 是处理器用来创建 HTTP 响应的接口,其源码结构如下所示:

type ResponseWriter interface {   // 用于设置/获取所有响应头信息    Header() Header   // 用于写入数据到响应实体    Write([]byte) (int, error)   // 用于设置响应状态码    WriteHeader(statusCode int)}

实际上,在底层支撑 ResponseWriter 的结构体就是 http.response,详见 net/http 包下 server.go 中的 readRequest 方法(调用处理器处理 HTTP 请求时调用了该方法返回响应对象),并且其返回值是 response 指针,这也是为什么在处理器方法声明的时候 Request 是指针类型,而 ResponseWriter 不是,实际上在底层,响应对象也是指针类型(因为在应用代码中需要设置响应头和响应实体,所以响应对象理应是指针类型)&#x

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值