Go语言通过http.Header处理HTTP头,底层为map[string][]string。使用r.Header.Get(“Key”)读取请求头单值,r.Header[“Key”]获取所有值;响应头通过w.Header().Set或Add设置,需在写响应前完成。示例包括获取User-Agent、设置Content-Type及客户端自定义Header。注意键名自动规范化,敏感头由系统管理。

在Go语言中处理HTTP请求和响应的Header非常直观,主要通过http.Header类型来操作。Header本质上是一个键值对映射(key-value map),每个键可以对应多个值,因此底层结构是map[string][]string。下面介绍常见操作并附上实用示例。
读取HTTP请求Header
在HTTP处理器中,可以通过http.Request对象的Header字段读取客户端发送的Header信息。
常用方法包括:
req.Header.Get("Key"):获取指定键的第一个值(推荐用于单值Header) req.Header["Key"]:返回该键对应的所有值切片 req.Header.Values("Key"):获取所有值(注意不是标准方法,需手动遍历)注意:Header.Get()会自动将键名转为规范格式(如”content-type”变为”Content-Type”)
示例代码:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ( "fmt" "net/http")func handler(w http.ResponseWriter, r *http.Request) { // 获取User-Agent userAgent := r.Header.Get("User-Agent") fmt.Fprintf(w, "User-Agent: %sn", userAgent) // 获取所有Accept语言 accepts := r.Header["Accept-Language"] fmt.Fprintf(w, "Accept-Language: %vn", accepts) // 遍历所有Header for key, values := range r.Header { fmt.Fprintf(w, "%s: %vn", key, values) }}func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil)}
设置HTTP响应Header
通过http.ResponseWriter的Header()方法可以设置响应Header,在调用w.Write()或w.WriteHeader()前生效。
常用方式:
w.Header().Set("Key", "Value"):设置单个值(覆盖已有) w.Header().Add("Key", "Value"):追加值(保留原有) w.Header().Set("Content-Type", "application/json"):常用于指定返回类型
示例:
func jsonHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("X-App-Version", "1.0.0") w.Header().Add("Set-Cookie", "session=abc123") w.Header().Add("Set-Cookie", "theme=dark") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, `{"message": "Hello"}`)}
修改请求Header(客户端场景)
当使用http.Client发起请求时,可以自定义请求Header。
func makeRequest() { client := &http.Client{} req, _ := http.NewRequest("GET", "https://httpbin.org/headers", nil) // 设置请求头 req.Header.Set("Authorization", "Bearer token123") req.Header.Set("X-Request-ID", "12345") req.Header.Add("Accept", "application/json") resp, _ := client.Do(req) defer resp.Body.Close() // 读取响应内容...}
常见注意事项
Header键名不区分大小写,Go会自动规范化(如content-type → Content-Type) 修改Header必须在写入响应体之前完成 使用Get()获取单值更安全,避免手动取[0]导致越界 敏感Header如Host、Content-Length由系统自动管理,不建议手动设置
基本上就这些。Golang的HTTP Header处理简洁明了,合理使用Set、Add和Get即可满足大多数场景需求。
以上就是Golang如何处理HTTP Header_Golang HTTP Header处理示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1424760.html
微信扫一扫
支付宝扫一扫