Мне кажется, я знаю, что здесь происходит, но могу ошибаться.Линия IOUtils.toByteArray
, скорее всего, не остановится, пока не достигнет конца потока.Поскольку в любое время по сети может поступать больше данных, вызов будет застревать в ожидании, пока не узнает, что больше ничего не поступит.Это будет известно только после завершения вызова AJAX на клиенте.Это говорит о том, что проблема в том, что клиент застрял и поэтому держит сервер.
Но почему клиент застрял?Потому что это ждет ответа.HTTP - это улица с двусторонним движением, и сервер должен подтверждать запрос по мере его поступления через сокет, не дожидаясь завершения соединения.
По сути, то, что вы должны делать, вместо того, чтобы читать всю информацию вbyte[]
заключается в том, что вы должны читать его постепенно в цикле.Затем вы должны ответить, как только клиент отправит все данные, которые составляют запрос.В HTTP клиент выполняет запрос, когда отправляет пустую строку на сервер.
Хотя это чисто предположение и должно рассматриваться как таковое.Я мог бы что-то здесь упустить.
Кроме того, примечание - IOUtils.toByteArray
не требует, чтобы вы входили в поток ввода в BufferedInputStream
.