2012-05-25 4 views
2

Давайте представим себе, что веб-сервер обрабатывает конвейер запросов, а один из них не работает по какой-то причине. В каких случаях сервер может поддерживать соединение и в каких случаях он должен его закрывать? Очевидно, что такие ошибки, как 403 и 404, могут быть устранены без закрытия соединения. И, скорее всего, ошибка приведет к закрытию соединения, если часть ответа уже отправлена.HTTP-конвейерная обработка и обработка ошибок

Но как насчет «нормальных» ошибок 5xx? Являются ли популярные реализации веб-серверов, как правило, поддерживать конвейеры или закрывать их?

Вся информация очень ценится.

ответ

0

Я думаю, что в общем случае соединение не будет закрыто для ошибок 5xx, потому что они специфичны для запроса, а не для соединения, поэтому другой запрос на одно и то же соединение может быть для другого ресурса.

Соединение должно быть закрыто только в том случае, если есть причина, по которой он не может оставаться открытым (например, сбой аутентификации NTLM (401), который зависит от соединения). Для почти всех других причин соединение должно оставаться открытым, поскольку запросы независимы, а HTTP действительно не имеет семантики связи.

Однако я не знаю, что делают популярные реализации веб-сервера. Если вы могли бы объяснить больше проблем, которые вы пытаетесь решить (почему вас это волнует, если соединение закрыто или нет), возможно, мы сможем предоставить больше информации.

+0

Как насчет ситуаций с памятью? Я реализую HTTP-сервер и буду рад сэкономить время, если другие не выпрыгнут из штанов в таких случаях. – Krit

+0

Если вы внедряете сервер, и сервер по какой-либо причине не может продолжать глобально, вы можете, конечно, закрыть соединение. –

+2

В общем, как сервер вы всегда можете закрыть соединение, если хотите, чтобы клиенты могли делать правильные вещи, когда вы это делаете. –

Смежные вопросы