Метод http.Header.Add

Метод http.Header.Add добавляет значение к HTTP-заголовку. В первый параметр мы передаем ключ заголовка (строку), во второй параметр мы передаем значение заголовка (строку). Если заголовок с указанным ключом уже существует, новое значение добавляется к существующим значениям через запятую. Если заголовок еще не существует, он создается с переданным значением. В отличие от метода http.Header.Set, который заменяет все существующие значения, метод http.Header.Add добавляет новое значение к уже существующим.

Синтаксис

goheader.Add(key, value)

Пример

Давайте создадим заголовок и добавим к нему несколько значений:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  header := http.Header{}
  header.Add("Accept", "application/json")
  header.Add("Accept", "text/plain")
  header.Add("X-Custom-Header", "value1")

  fmt.Println(header.Get("Accept"))
  fmt.Println(header.Get("X-Custom-Header"))
}

Результат выполнения кода:

go"application/json, text/plain"
"value1"

Пример

Метод http.Header.Add автоматически преобразует ключ заголовка в канонический формат. Давайте проверим это на примере:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  header := http.Header{}
  header.Add("content-type", "application/json")
  header.Add("Content-Type", "text/plain")

  fmt.Println(header.Get("Content-Type"))
}

Результат выполнения кода:

go"application/json, text/plain"

Пример

Используем метод http.Header.Add для добавления заголовков в HTTP-запрос:

gopackage main

import (
  "fmt"
  "net/http"
  "net/url"
)

func main() {
  req, _ := http.NewRequest("GET", "https://example.com", nil)
  req.Header.Add("User-Agent", "MyApp/1.0")
  req.Header.Add("Accept", "application/json")
  req.Header.Add("Accept", "application/xml")

  fmt.Println(req.Header.Get("User-Agent"))
  fmt.Println(req.Header.Get("Accept"))
}

Результат выполнения кода:

go"MyApp/1.0"
"application/json, application/xml"

Пример

Используем метод http.Header.Add для добавления заголовков в HTTP-ответ:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  header := http.Header{}
  header.Add("Cache-Control", "no-cache")
  header.Add("Cache-Control", "no-store")
  header.Add("X-Powered-By", "Go")

  fmt.Println(header.Get("Cache-Control"))
  fmt.Println(header.Get("X-Powered-By"))
}

Результат выполнения кода:

go"no-cache, no-store"
"Go"

Смотрите также

  • метод http.Header.Set,
    который устанавливает значение заголовка, заменяя все существующие
  • метод http.Header.Get,
    который возвращает первое значение заголовка
  • метод http.Header.Del,
    который удаляет заголовок
  • метод http.Header.Values,
    который возвращает все значения заголовка в виде слайса