Вероятно, сценарий состоит в том, что вы, безусловно, можете отправить ответ, как только узнаете, что был сделан какой-либо запрос, даже до получения заголовков, но браузер, скорее всего, просто отправит все тело, прежде чем он даже попытается прочитать или проанализировать ответ , Таким образом, все будет загружено, пока TCP для ответа не будет работать, и это будет продолжаться до тех пор, пока браузер не начнет обрабатывать ответ после отправки всего файла. Таким образом, JS не может получить доступ к ответу, пока файл не будет отправлен полностью.

пользователь веб-сайта отправляет HTML-форму с: (1) методом публикации; (2) многочастный / форма-данные-энктип; и (3) большой вложенный файл, может ли сервер загрузить опубликованный файл и отправить сгенерированный сервером HTTP-ответ до завершения загрузки файла, без использования AJAX?

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

  <form action="upload-with-caption/" method="post" enctype="multipart/form-data">
    <input type="hidden" id="hiddenInfo" name="hiddenInfo" />
    File:     <input type="file" name="imgFile" id="imgFile" /><br />
    Caption:  <input type="text" name="caption" id="caption" />
        <input type="submit" />
  </form>

Я хочу сохранить заголовок в таблице базы данных с определением:

[Files_table]

file_id [уникальный идентификатор]file_caption [varchar (500)]file_status [int]

Затем я хочу загрузить файл в/root/{unique-id}/filename.ext.

file_status сопоставляется с перечислением C # со следующим определением:

enum  FileUploadStatus{
    Error = 0,
    Uploading = 1,
    Uploaded = 2
}

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

Могу ли я сделать это с помощью одного синхронного сообщения HTTP?

Примечание: я, очевидно, захочу проверить наличие обновлений статуса позже, используя AJAX, но это не то, что задает этот вопрос. Я специально спрашиваю, может ли файл продолжить загрузку после отправки ответа.

 Pushkar25 янв. 2011 г., 18:05
Вы можете легко показать статус «загрузки», используя JavaScript. Для этого не нужен AJAX.

Ответы на вопрос(1)

Решение Вопроса


Вы не можете отправить ответ, пока не получите весь запрос.

 eskatos21 мар. 2013 г., 20:07
ДА и НЕТ :-) HTTP-сервер может обработать ответ (заголовки и сущность) перед использованием всей сущности запроса, но только при возврате ошибки. Другими словами, невозможно попросить клиента прервать объект запроса, принимая ответ без ошибки, только ответ с ошибкой.
 koush26 дек. 2012 г., 19:46
Это не совсем правда. Конечно, вы можете отправить несколько запросов до того, как будет получен один ответ: http pipelining.en.wikipedia.org/wiki/HTTP_pipelining Я полагаю, что вы также можете отправить ответ, как только заголовки запроса будут получены, но тело запроса все еще находится в пути. У вас будут проблемы только в том случае, если вы начнете отправлять ответные письма в ожидании еще не поступивших запросов
 DDS25 нояб. 2013 г., 23:44
Вероятно, сценарий состоит в том, что вы, безусловно, можете отправить ответ, как только узнаете, что был сделан какой-либо запрос, даже до получения заголовков, но браузер, скорее всего, просто отправит все тело, прежде чем он даже попытается прочитать или проанализировать ответ , Таким образом, все будет загружено, пока TCP для ответа не будет работать, и это будет продолжаться до тех пор, пока браузер не начнет обрабатывать ответ после отправки всего файла. Таким образом, JS не может получить доступ к ответу, пока файл не будет отправлен полностью.

Ваш ответ на вопрос