Я пытаюсь понять, где я могу настроить тайм-аут запроса для всех запросов, поступающих на мой сервлет (или все мои сервлеты)? Это, как я думаю, контейнерное свойство? Кроме того, как это влияет на разные браузеры? Все ли они соответствуют параметру, который диктует контейнер? Или, может быть, время тайм-аута запроса - это не то, что я могу контролировать, и каждый браузер сам решает это? (Просто, чтобы быть ясным, я не говорю о тайм-ауте сеанса)
Как указать параметр таймаута запроса Http в контейнере сервлетов Java
Ответ 1
Тайм-аут от клиента (т.е. как долго он ожидает ответа на HTTP-запрос) определяется на клиенте. Для IE см. this, а для Firefox см. this.
Вы не можете контролировать этот таймаут с сервера.
Ответ 2
Даже если вы не можете контролировать время ожидания клиента, вы можете сделать сервер очень нетерпеливым:) Например, на Tomcat вы можете сделать это в своем коннекторе,
<Connector port="8080"
...
connectionTimeout ="5000"
disableUploadTimeout="false" />
Это заставит сервер ждать только 5 секунд и закрыть соединение. Браузер получит закрытую ошибку соединения. Вы можете обрабатывать его так же, как и время ожидания в клиенте.
Конечно, это работает только в том случае, если время ожидания вызвано сервером, а не проблемы с подключением между браузером и сервером.
Ответ 3
Вы не можете контролировать время ожидания клиента с сервера. Однако вы можете отправлять данные обратно клиенту время от времени, пока ваша долго работающая операция занята. Это предотвратит тайм-аут клиента и может использоваться для отображения прогресса пользователю и т.д. Запись данных в OutputStream или Writer, полученных из ответа и сброса вызова, для отправки частичных данных клиенту.