0%
- ResponseWriter
- http.response
ResponseWriter
- 从服务器向客户端返回响应需要使用 ResponseWriter
- ResponseWriter 是一个接口,handler 用它来返回响应
- 真正支撑 ResponseWriter 的幕后 struct 是非导出的
http.response
写入到 ResponseWriter
- Write 方法接收一个 byte 切片作为参数,然后把它写入到 HTTP 响应的 Body 里面。
- 如果在 Write 方法被调用时,header 里面没有设定 content type,那么数据的前 512 字节就会被用来检测 content type
- WriteHeader 方法接收一个整数类型(HTTP 状态码,例如
http.StatusNotFound
)作为参数,并把它作为 HTTP 响应的状态码返回
- 如果该方法没有显式调用,那么在第一次调用 Write 方法前,会隐式的调用 WriteHeader(http.StatusOK)
- 所以 WriteHeader 主要用来发送错误类的 HTTP 状态码
- 调用完 WriteHeader 方法之后,仍然可以写入到 ResponseWriter,但无法再修改 header 了
- Header 方法返回 headers 的 map,可以进行修改
- 修改后的 headers 将会体现在返回给客户端的 HTTP 响应里
内置的 response
- NotFound() ,包装一个 404 状态码和一个额外的信息,例:
http.HandleFunc("/111", http.NotFound)
- ServeFile() ,从文件系统提供文件,返回给请求者,例:
http.Handle("/css/", http.FileServer(http.Dir("www/wxy")))
- ServeContent() ,它可以把实现了 io.ReadSeeker 接口的任何东西里面的内容返回给请求者
- 还可以处理 Range 请求(范围请求),如果只请求了资源的一部分内容,那么 ServeContent 就可以如此响应。而 ServeFile 或 io.Copy 则不行。
- Redirect() ,告诉客户端重定向到另一个 URL