Я использую AX IOS в веб-клиенте, чтобы отправить файл на сервер express в качестве загрузки. Поскольку и размер файла, и пропускная способность пользователя-клиента являются переменными, для завершения sh запроса POST может потребоваться определенное время. На бэкэнде применяется некоторый лог c, и запрос немедленно отклоняется.
Проблема в том, что клиент получает ответ только после завершения запроса, что может длиться несколько секунд.
Я уже проверял, что это не ошибка серверной части, так как поведение такое же при POSTing на любой произвольный URL-адрес с поддержкой публикации в Интернете, независимо от технологии. Вот (более) упрощенный пример случая.
Вот действие публикации. Обратите внимание на одобренный запрос на произвольный URL-адрес с включенной публикацией. Он ведет себя точно так же:
try{
console.log("posting....")
const res = await axios.post("http://localhost:4000/upload", formData)
// const res = await axios.post("https://github.com/logout", formData)
console.log("result:")
console.log(res)
}catch(err){
console.error(err)
}
И демонстрационный express бэкэнд-маршрут:
app.post("/upload", (req, res) => {
console.log("Rejecting...")
res.status(403).send()
console.log("Rejected.")
return
})
В целях тестирования я выбираю файл размером 3,7 МБ и уменьшаю пропускную способность моего браузера до предустановка Fast 3G.
Бэкэнд немедленно выводит:
Rejecting ... Rejected.
Тогда как запрос ожидает обработки около 43 секунд до возврат ошибки 403:
devtools запросить проверку
Я упустил что-то очевидное? Это настолько распространенная функция, что заставляет меня сомневаться, что это правильный способ обработки. И если это действительно так, то есть ли у нас какая-либо информация о том, активен ли поток express в это время, или это просто неудобство для клиента?
Заранее спасибо!