Ответ
Да, файлы передаются в теле HTTP-запроса. Основные методы — использование типа контента multipart/form-data для форм или application/octet-stream для бинарных данных.
1. Multipart/form-data (Стандарт для HTML-форм и API)
Используется, когда нужно отправить файлы вместе с другими полями формы.
Пример HTTP-запроса:
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=MyBoundary123
--MyBoundary123
Content-Disposition: form-data; name="description"
Профильное фото
--MyBoundary123
Content-Disposition: form-data; name="file"; filename="avatar.jpg"
Content-Type: image/jpeg
<бинарные данные файла>
--MyBoundary123--
Пример на JavaScript с fetch:
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('comment', 'Мой файл');
fetch('/api/upload', {
method: 'POST',
body: formData // Заголовок Content-Type установится автоматически
});
2. Direct Binary Upload
Файл передается как есть, без дополнительных полей.
Пример:
PUT /files/avatar.jpg HTTP/1.1
Host: example.com
Content-Type: application/octet-stream
<бинарные данные файла>
Ключевые моменты:
- Для больших файлов используйте
Content-LengthилиTransfer-Encoding: chunked. - Всегда проверяйте MIME-тип и размер файла на сервере в целях безопасности.