Можно ли передавать бинарные данные по HTTP1.1

«Можно ли передавать бинарные данные по HTTP1.1» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. HTTP1.1 поддерживает передачу бинарных данных через тело запроса/ответа. Основные способы:

  1. Через тело запроса (POST/PUT):
data := []byte{0x48, 0x65, 0x6c, 0x6c, 0x6f}
req, _ := http.NewRequest("POST", url, bytes.NewReader(data))
  1. Через multipart/form-data:
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "data.bin")
part.Write([]byte{0x01, 0x02, 0x03})
  1. Base64 кодирование (если нужна текстовая передача):
encoded := base64.StdEncoding.EncodeToString([]byte{0x01, 0x02})

Важно правильно устанавливать Content-Type (например, application/octet-stream для бинарных данных). HTTP1.1 использует Transfer-Encoding: chunked для потоковой передачи больших бинарных данных.