http.Cookie

Давайте поговорим об http-куках. Если вы думаете, что это такие пары «ключ-значение», которые сервер и клиент гоняют туда-сюда в каждом запросе, то это верно лишь отчасти.

За годы развития веба куки обзавелись дополнительной атрибутикой. Вот как выглядит структура Cookie в Go 1.23:

  • Name и Value — ключ и значение.
  • Quoted — true, если значение передано в кавычках.
  • Path — разрешает куку на страницах, которые начинаются с указанного пути.
  • Domain — разрешает куку на указанном домене и всех его поддоменах.
  • Expires — дата окончания годности куки.
  • MaxAge — срок жизни куки в секундах.
  • Secure — разрешает куку только по HTTPS.
  • HttpOnly — закрывает доступ к куке из JavaScript.
  • SameSite — разрешает или запрещает куку при кросс-доменных запросах.
  • Partitioned — ограничивает доступ к third-party кукам.

Неслабо, да?

Начиная с версии Go 1.23, серверную куку можно распарсить из строки с помощью http.ParseSetCookie:

line := "session_id=abc123; SameSite=None; Secure; Partitioned; Path=/; Domain=example.com"
cookie, err := http.ParseSetCookie(line)

Браузерные куки тоже можно распарсить из строки, с помощью http.ParseCookie:

line := "session_id=abc123; dnt=1; lang=en; lang=de"
cookies, err := http.ParseCookie(line)

песочница

★ Подписывайтесь на новые заметки.