Загрузка Http и файлов - как это работает (под капотом)

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

В основном, как загружается файл из поля ввода файла веб-страницы на веб-сервер (например, на сайте .net) с загруженным событием управления FileUpload?

Я понял, что сообщение было отправлено на сервер, запрашивающий поток, который затем передается обратно в браузер и начинается потоковая передача данных на сервер.

Мой друг говорит, что он понимает, что весь файл закодирован в почтовый запрос браузером, а затем (массивный) пост отправляется на сервер.

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

Итак, как это работает от браузера к серверу?

Ответы

Ответ 1

Твой друг прав. Если вы хотите индикатор хода AJAX, вам нужно перепрыгнуть через несколько обручей.

Обычно метод заключается в отправке загрузки внутри iframe в IHttpHandler на сервере, который хранит прогресс на сервере в общедоступном словаре с ключом с идентификатором, который клиент делает и включает в себя как запрос выполнения AJAX, так и загружать сообщение. Таким образом, когда клиент делает запросы AJAX, обработка кода сервера, которая запрашивает, может считывать значение из этого словаря, чтобы узнать, сколько байтов запроса POST файла обрабатывается сервером.

Да, это сложно:)

Ответ 2

Я думаю, что ваш друг прав, файл закодирован в сообщение, отправленное на сервер. Если вы действительно хотите увидеть, как именно это работает, попробуйте использовать Tamper Data в Firefox, чтобы просмотреть фактические данные.

ETA:

В стиле AJAX вы добавляете упоминание о работе, занимая сообщение в скрытом iframe, а затем используя запросы AJAX для проверки прогресса загрузки на стороне сервера.