On Wed, 13 Feb 2002, Oleg Ilin wrote:
> Hello Уважаемые,
>
> Хочется ограничить объем траффика, передаваемый
> клиентом на сервер в запросе. (например POST).
> Причем так, чтобы если body, запроса превысило лимит,
> то обрывался коннект с таким клиентом.
> Если возможно не обрывать коннект, то останавливать
> прием и выдавать 413 ошибку, то это было-бы еще лучше.
>
> Сделал:
>
> в httd.conf добавил
> LimitRequestBody 204800
>
> В результате при отправки данных формы
> Получаю ошибку 413, однако trafd показывает:
>
> From Port To Port Proto Data All
> IP Клиента client IP Сервера 80 tcp 334011
>343579
>
> Приехало вместе со всеми заголовками 343579 байт!
>
> в error_log'е
> [Wed Feb 13 15:12:11 2002] [error] [client IP Клиента] Request content-length
>of 324892 is larger than the configured limit of 204800
>
> Собственно в body передано: 324892 байт.
>
> Но хочется чтобы на сервер могло придти не более 200Kb.
> Подскажите пожалуйста, как это сделать?
Корректно и в общем случае - никак.
MSIE 4, 5 (и, возможно 6, не проверял) и NN4 считают, что ответ
сервера может придти только после того, как они в него всё залили.
Если же сервер закрывает сокет раньше, чем они зальют, то они это
называют "This page can not be displayed" (MSIE) или network i/o
error (NN4). А вот Mozilla понимает и показывает, что ему вернули.
Что делает Апач ? При получении заголовка с большим телом Апач
выдаёт 413 и делает lingering_close, то есть, shutdown(), и в течение
30 секунд читает через 2-двух секундный select() всё, чего ему дали.
Соответсвенно, всё что ему успеют залить за 30 секунд, он и прочитает.
Что можно сделать ? Уменьшить время ожидания.
Squid, кстати, ничего не читает, а просто говорит 413 и закрывает сокет.
Игорь Сысоев
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =