2.8 KiB
2.8 KiB
Opus — диагностика DrHider «Failed to fetch»
29.06.2026
Симптом
Страница https://contractor.pythonk8s.services.ngcloud.ru/DrHider загружается (HTML новый, редизайн Nubes, версия v0.1). Пользователь выбирает файл, жмёт «Обфусцировать» → мгновенно ❌ Failed to fetch.
Что проверено
- VM:
curl -X POST -F 'files=@file' http://127.0.0.1:8766/api/drhider→ HTTP 200, валидный ZIP. Обработчик работает. - Managed Flask → VM:
curl -X POST -F 'files=@file' https://contractor.pythonk8s.services.ngcloud.ru/api/drhider→ HTTP 200, валидный ZIP. Прокси работает. - Managed Flask GET:
curl https://contractor.pythonk8s.services.ngcloud.ru/DrHider→ HTTP 200, новый HTML. - nginx на VM:
location /api/проксирует на127.0.0.1:8766.
Оба curl-теста проходят с моей машины (Linux) и с VM. Браузер пользователя (Windows, Chrome) — Failed to fetch мгновенно, без задержки.
Архитектура запроса
Браузер (Windows/Chrome)
→ POST /api/drhider (multipart/form-data)
→ contractor.pythonk8s.services.ngcloud.ru (Managed Flask, Nubes k8s)
→ httpx.Client.post("https://contracts.kube5s.ru/api/drhider", files=...)
→ nginx contracts.kube5s.ru → location /api/ → 127.0.0.1:8766
→ convert_server.py: do_POST → _handle_drhider → drhider.obfuscate_files()
→ ZIP ответ
Код фронтенда (JS inline в HTML)
const fd = new FormData();
files.forEach(f => fd.append('files', f));
const r = await fetch('/api/drhider', { method:'POST', body:fd, signal:AbortSignal.timeout(300000) });
Вопросы
- Почему curl работает, а браузер — нет? «Failed to fetch» мгновенное — не таймаут.
- Может ли managed-сервис Nubes блокировать POST с multipart/form-data? (nginx, WAF, etc.)
- Может ли
httpx.Client.post(files=...)на managed Flask потерять файл при проксировании? (managed Flask перечитываетrequest.files, формирует новый multipart для httpx) - Нужно ли добавить
Access-Control-Allow-Originна managed Flask, хотя запрос same-origin? - Какие ещё причины мгновенного
Failed to fetchв Chrome при работающем curl?
Что попросить пользователя сделать
Конкретные шаги для диагностики в Chrome DevTools (без технического жаргона).