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处理器中,可以通过http.Request对象的Header字段读取客户端发送的Header信息。
常用方法包括:
req.Header.Get("Key"):获取指定键的第一个值(推荐用于单值Header)req.Header["Key"]:返回该键对应的所有值切片req.Header.Values("Key"):获取所有值(注意不是标准方法,需手动遍历)Header.Get()会自动将键名转为规范格式(如"content-type"变为"Content-Type")
示例代码:
立即学习“go语言免费学习笔记(深入)”;
<font face="Courier New,Courier,monospace">package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
// 获取User-Agent
userAgent := r.Header.Get("User-Agent")
fmt.Fprintf(w, "User-Agent: %s\n", userAgent)
// 获取所有Accept语言
accepts := r.Header["Accept-Language"]
fmt.Fprintf(w, "Accept-Language: %v\n", accepts)
// 遍历所有Header
for key, values := range r.Header {
fmt.Fprintf(w, "%s: %v\n", key, values)
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}</font>通过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"):常用于指定返回类型示例:
<font face="Courier New,Courier,monospace">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"}`)
}</font>当使用http.Client发起请求时,可以自定义请求Header。
<font face="Courier New,Courier,monospace">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()
// 读取响应内容...
}</font>content-type → Content-Type)Get()获取单值更安全,避免手动取[0]导致越界Host、Content-Length由系统自动管理,不建议手动设置基本上就这些。Golang的HTTP Header处理简洁明了,合理使用Set、Add和Get即可满足大多数场景需求。
以上就是Golang如何处理HTTP Header_Golang HTTP Header处理示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号