Golang Go语言中 net/http header 的使用疑问

在使用 go "net/http" 创建一个 http.Request 去上传文件到 minio 的过程中, 发现了几个疑问点:

  1. 为什么 Header 是一个 map[string][]string, 虽然我看了网上一些讨论 https://www.reddit.com/r/golang/comments/cgbkel/why_are_headers_mapstringstring/ 但也不太理解,
  2. Header 的 Add 跟 Set 的实际使用场景上的区别是? 为什么 Header 的值是个切片, 但 Get 却只返回第一个元素,
  3. 基于 2, 在实际使用过程中, 应该如何读取 Header 的值, 是遍历 Header 后使用键去 Get 还是直接使用值, 我觉得类型 Header 是非私有的会造成使用上的疑惑(・∀・(・∀・(・∀・*), 这是 go 的语法特点导致的么?

Golang Go语言中 net/http header 的使用疑问

更多关于Golang Go语言中 net/http header 的使用疑问的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

因为 http header 可以重复多次 比如 cookie

更多关于Golang Go语言中 net/http header 的使用疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


  1. 因为 http header 就是设计成了这样的结构,值可以是数组。但并不代表所有 header 的值都必须支持数组配置,有些 header key 设计出来就只有一个字符串值
    2. 基于上述设计理念,go header 结构体的辅助方法就很好理解了,Add 的场景就是为了给数组型 value 使用的,Set 是给字符串型 value 使用的,Get 也是
    3. 在实际使用过程中,需要使用者明白当前你想使用的 header key 支持什么类型的 value ,假如是数组,那么就遍历,假如是字符串,那么直接用辅助方法 Get 就好

Add:添加新 header
Set:设置现有 header 的 value

Add adds the key, value pair to the header. It appends to any existing values associated with key. Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key.

里面的注释我也读过, 应该就是我对 http header 设计的知识不足, 要查缺补漏.

在Golang中使用net/http包处理HTTP请求和响应时,headers是一个关键部分。以下是一些关于如何在Go语言中正确使用net/http包处理HTTP headers的要点:

  1. 设置请求Headers: 在发送HTTP请求时,你可以通过http.RequestHeader字段来设置headers。例如:

    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        // handle error
    }
    req.Header.Set("User-Agent", "my-app/1.0")
    
  2. 获取响应Headers: 在接收HTTP响应时,你可以通过http.ResponseHeader字段来获取headers。例如:

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        // handle error
    }
    contentType := resp.Header.Get("Content-Type")
    
  3. 常见Headers操作

    • 使用Set方法设置header值。
    • 使用Get方法获取单个header值。
    • 使用Values方法获取某个header的所有值(适用于多值header)。
    • 使用Del方法删除某个header。
  4. 注意事项

    • Header名称是大小写不敏感的,但通常使用首字母大写形式,如Content-Type
    • 在设置和获取headers时,确保正确处理错误和异常情况。

通过掌握这些基本用法,你可以轻松地在Go语言应用程序中管理HTTP headers。希望这些信息对你有所帮助!

回到顶部