41 lines
2.4 KiB
Markdown
41 lines
2.4 KiB
Markdown
# Вопрос для Sonnet v2 — первый upload браузер vs curl
|
|
|
|
## Ситуация
|
|
|
|
Мигрировали сервис на Flask (managed Python, Штурвал). Всё работает кроме ОДНОГО:
|
|
**первый POST с файлом из браузера зависает на 100% и не завершается.**
|
|
|
|
## Ключевые факты (проверено, не врать)
|
|
|
|
1. **Curl работает, браузер — нет. С ОДНОЙ машины.**
|
|
- curl: 20/20, ~80ms каждый
|
|
- Браузер (Chrome/Electron): первый файл → XHR 100% → завис намертво
|
|
- Остальные файлы даже не начинают загружаться (первый блокирует очередь)
|
|
|
|
2. **Браузерный запрос НЕ доходит до nginx.**
|
|
- `kubectl logs ingress` показывает ТОЛЬКО curl-запросы
|
|
- Браузерный XHR: прогресс 100% (данные ушли), но ответ не приходит
|
|
- onerror НЕ срабатывает (не RST, не таймаут — просто тишина)
|
|
- xhr.timeout = 180000 (3 минуты)
|
|
|
|
3. **Инфраструктура проверена:**
|
|
- Cilium MTU: 1400 (underlay 1450, Geneve -50 = pod 1400)
|
|
- Ingress ConfigMap: keep-alive 75, client-body-timeout 60, client-header-timeout 30, proxy-body-size 1024m
|
|
- Ingress аннотации: proxy-body-size 1024m, proxy-connect-timeout 120, proxy-read-timeout 600, proxy-send-timeout 600
|
|
- HTTP/2: выключен (use-http2 false)
|
|
- Cilium: 4/4 ноды reachable, tunnel-protocol geneve
|
|
- kube-vip: DaemonSet на всех 4 нодах, все Running
|
|
- Ingress поды: 2/2 Ready, образ v1.12.6
|
|
- Helm upgrade 15 июля 02:00 UTC НЕ менял значения (revision 7 и 8 идентичны)
|
|
|
|
4. **Код:**
|
|
- warmup `fetch('/health')` при загрузке страницы — есть
|
|
- Flask no_cache (Cache-Control: no-cache) — есть
|
|
- app.run(threaded=True)
|
|
|
|
5. **Затрагивает ОБА сервиса:** и contractor, и drhider (который работал вчера)
|
|
|
|
## Вопрос
|
|
|
|
Почему curl (20/20) работает, а браузерный XHR (0/1) — нет, при том что ОБА с одной машины через один и тот же интернет-канал?
|