Можно ли отправить файл с помощью GET-запроса?

«Можно ли отправить файл с помощью GET-запроса?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, GET-запрос не предназначен и не пригоден для отправки файлов.

Причины:

  1. Семантика: GET — идиоматический метод для получения ресурсов, а не для их загрузки.
  2. Ограничения размера: Данные в GET передаются в URL (как query-параметры). Максимальная длина URL ограничена браузерами (обычно ~2000 символов) и серверами.
  3. Отсутствие кодирования для бинарных данных: URL не предназначен для передачи бинарных данных (как изображения или PDF).

Как правильно отправлять файлы: Используйте метод POST (или PUT) с типом контента multipart/form-data.

Пример теста на Python с requests:

import requests

url = 'https://api.example.com/upload'
files = {'document': open('report.pdf', 'rb')}
# Дополнительные поля формы
data = {'description': 'Quarterly report'}

response = requests.post(url, files=files, data=data)

assert response.status_code == 200, f'Upload failed: {response.text}'
print('File uploaded successfully')

Что проверяет QA:

  • Корректный Content-Type в заголовках запроса (multipart/form-data; boundary=...).
  • Обработка больших файлов (таймауты, прогресс).
  • Валидация типа и размера файла на стороне сервера.
  • Корректное извлечение файла и дополнительных полей формы.