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


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

1 3

1 ответ:

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

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

Обновление :

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

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

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

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

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

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