首页 > 后端开发 > Golang > 正文

Golang如何处理HTTP Header_Golang HTTP Header处理示例

P粉602998670
发布: 2025-11-18 14:06:05
原创
231人浏览过
Go语言通过http.Header处理HTTP头,底层为map[string][]string。使用r.Header.Get("Key")读取请求头单值,r.Header["Key"]获取所有值;响应头通过w.Header().Set或Add设置,需在写响应前完成。示例包括获取User-Agent、设置Content-Type及客户端自定义Header。注意键名自动规范化,敏感头由系统管理。

golang如何处理http header_golang http 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语言免费学习笔记(深入)”;

<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响应Header

通过http.ResponseWriterHeader()方法可以设置响应Header,在调用w.Write()w.WriteHeader()前生效。

千面视频动捕
千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。

千面视频动捕 173
查看详情 千面视频动捕

常用方式:

  • 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>
登录后复制

修改请求Header(客户端场景)

当使用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>
登录后复制

常见注意事项

  • Header键名不区分大小写,Go会自动规范化(如content-typeContent-Type
  • 修改Header必须在写入响应体之前完成
  • 使用Get()获取单值更安全,避免手动取[0]导致越界
  • 敏感Header如HostContent-Length由系统自动管理,不建议手动设置

基本上就这些。Golang的HTTP Header处理简洁明了,合理使用SetAddGet即可满足大多数场景需求。

以上就是Golang如何处理HTTP Header_Golang HTTP Header处理示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号