Есть ли ограничение на буфер (размер или количество файлов) в современных браузерах, в которых реализованы FormData и XmlHttpRequest?

Я реализую XmlHttpRequest и FormData для нового приложения на нашем сайте, и есть опасения, что некоторые клиенты могут попытаться загрузить десятки или, возможно, сотни тысяч документов одновременно. Прежде чем я предпринял кропотливые усилия по тестированию этих условий, я надеялся, что кто-нибудь знает, существует ли ограничение на (1) количество файлов, которые можно загрузить за один раз, и/или (2) существует ли размер файла limit в любом из современных браузеров, в которых реализованы эти функции.


person Steve Brownlee    schedule 23.05.2012    source источник


Ответы (1)


  1. Ограничение на размер файла зависит от типа данных, используемых приложением браузера для хранения атрибута длины содержимого (обычно целое число со знаком или без знака, или около 2 ГБ/4 ГБ). Вы также можете наложить ограничение на максимальный размер файла в коде на стороне сервера, проверив длину содержимого и отклонив его загрузку, превышающую определенный порог.

  2. Количество файлов, которые можно загрузить за один раз, зависит от максимального количества подключений, разрешенных для каждого домена. Дополнительную информацию см. в этом вопросе . Таким образом, все файлы будут загружены по n раз.

ОБНОВЛЕНИЕ:

Я провел некоторое тестирование, так как не был уверен, передает ли браузер файлы из файловой системы прямо в TCP-соединение или буферизует их в памяти.

Если я попытаюсь загрузить очень большой файл из Chrome и FF через Fiddler, использование памяти процессом браузера на моем компьютере не увеличится, в то время как процесс Fiddler увеличится до 2 ГБ, прежде чем произойдет сбой (это 32-разрядное приложение).

Итак, если на сервере вы передаете содержимое файлов прямо в свое хранилище данных, я не думаю, что вы столкнетесь с проблемами памяти ни на клиенте, ни на сервере.

Имейте в виду, что большинство веб-серверов должны быть настроены на прием очень больших запросов.

Кроме того, убедитесь, что вы используете один экземпляр XmlHttpRequest для каждого файла. Если вы загрузите все через одно соединение, длина содержимого будет равна общему размеру всех файлов.

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

person Pencho Ilchev    schedule 23.05.2012
comment
Большое спасибо за ответ Пенчо. Давайте доведем ваши утверждения до крайности, чтобы проверить их. У пользователя есть 1,2 млн документов, которые он хочет загрузить для обработки. Размер ни одного из этих документов не превышает 2 ГБ, но средний размер составляет 1,2 ГБ. Вот тут-то и проявляется мое незнание того, как кэшируются файлы. Сможет ли система с 8 ГБ ОЗУ кэшировать такое количество файлов в браузере перед загрузкой? - person Steve Brownlee; 23.05.2012
comment
Я также собираюсь отметить ваш ответ как принятый, поскольку вы ответили на мой вопрос в его первоначальной форме, независимо от моего дополнительного вопроса. - person Steve Brownlee; 23.05.2012