Multipath TCP (MPTCP) для DiscourseHub и PWA в iOS Safari за Caddy

Продолжение: прерванная правка поста в iOS и непрерывность соединения HTTP/3

Я столкнулся с практическим примером проблемы непрерывности соединения, о которой я спрашивал ранее.

21 октября 2026 года, когда я редактировал пост на моем частном сервере Discourse на iPhone 16 Pro, используя PWA Safari, синяя полоса Сохранение застряла. Я только что продиктовал дополнительные лекционные заметки.

Редактор стал недоступен, включая случаи, когда я касался синей полосы «Сохранение», поэтому я не мог скопировать несохраненный текст в другое место.

После более длительного ожидания, чем обычно, я вручную отключил Wi-Fi, чтобы попробовать использовать мобильную связь. Страница не изменилась сразу, но последующие попытки навигации также казались зависшими.

Затем я изучил логи Caddy и nginx, а также историю версий поста.

В 12:20:08 BST:

  • Caddy зафиксировал запрос HTTP/3 PUT /posts/70695 из университетской сети Wi-Fi, где были получены все 1000 байт тела запроса, но статус был 0.

  • nginx зафиксировал соответствующий запрос как HTTP 400, без времени обработки маршрута Discourse или upstream.

  • Два других запроса с iPhone, отправленных через мобильную сеть, также получили HTTP 400 в ту же секунду.

  • В это время не было записано успешной версии поста.

Последующая правка успешно завершилась в 12:20:55 BST, но продиктованный текст отсутствовал.

Также была успешная автоматическая сохранение черновика Discourse в 12:19:44 BST, хотя я не могу установить, содержал ли он пропавший текст.

Я понимаю, что ручное отключение Wi-Fi могло прервать незавершенные запросы. Однако исходная операция сохранения уже зависла до того, как я сменил сетевое соединение.

Это вызывает два вопроса, связанных с моим первоначальным сообщением:

  1. Миграция соединения QUIC: Есть ли рекомендуемый способ определить, предпринял ли браузер iOS попытку миграции существующего соединения HTTP/3, вместо создания нового соединения или отказа от незавершенных запросов?

  2. Восстановление редактора Discourse: Если запрос на правку поста зависает или прерывается, ожидается ли, что редактор останется недоступным за состоянием «Сохранение»? Существует ли механизм тайм-аута, повторных попыток или восстановления, который должен сохранить несохраненный текст?

Меня особенно интересует второй вопрос, потому что я не смог вернуться к редактору, чтобы скопировать свою работу, прежде чем пытаться восстановить подключение.

Я не менял настройки Caddy, nginx или HTTP/3 в результате этого инцидента, поскольку имеющиеся данные пока не позволяют определить, что вызвало остановку исходной операции сохранения.