java.io.IOException: Сломанный канал при запросе Ajax. Всегда ли мы подавляем эту «безвредную» ошибку веб-приложения? - PullRequest
0 голосов
/ 20 октября 2019

В редких случаях мы получаем следующую ошибку в нашем производственном веб-приложении, работающем на Tomcat 8 и написанном на Spring / SpringMVC с Ajax-запросами от JS:

Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
    at sun.nio.ch.IOUtil.write(IOUtil.java:65)

Ошибка возникает при очень маленьком Ajax-запросеНичего большого, только дюжина или около того полей в строке JSON.

Из исследования я понимаю, что эта "безвредная" ошибка вызвана тем, что клиент закрывал браузер перед отправкой ответа. Другими словами, преждевременное закрытие браузера, пока операция еще продолжалась: https://stackoverflow.com/a/51809667/1005607

Это не ошибка логики вашего приложения. Это просто из-за поведения пользователя. В вашем коде нет ничего неправильного как такового.

Есть две вещи, которые вы можете сделать:

Ignore this specific exception so that you don't log it.

Но я не понимаю: это такаяЧасто ли мы пишем все наши веб-приложения, чтобы всегда ловить это исключение "Сломанной трубы"? Очень часто преждевременно закрывать браузеры, разве не каждая отдельная операция защищает от этого путем перехвата этого исключения всегда ? Это первый раз, когда я слышу об общей уязвимости ввода / вывода, которая, похоже, «должна» обнаруживаться при каждой возможной веб-операции! Как правильно надежно охранять это событие?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...