0%

Go http响应

  • ResponseWriter
  • http.response

    ResponseWriter

  • 从服务器向客户端返回响应需要使用 ResponseWriter
  • ResponseWriter 是一个接口,handler 用它来返回响应
  • 真正支撑 ResponseWriter 的幕后 struct 是非导出的 http.response

写入到 ResponseWriter

  • Write 方法接收一个 byte 切片作为参数,然后把它写入到 HTTP 响应的 Body 里面。
  • 如果在 Write 方法被调用时,header 里面没有设定 content type,那么数据的前 512 字节就会被用来检测 content type

WriteHeader()

  • 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