Как я могу перенаправить HTTP-запрос POST сразу после обработки заголовков? - PullRequest
0 голосов
/ 07 августа 2010

В Windows CE я сейчас нахожусь в ситуации, когда мы внедряем упрощенный веб-сервер с нуля.Преимущественное использование этого сервера будет осуществляться через одноранговое соединение USB RNDIS.Сервер размещается в управляемом приложении, работающем на устройстве.

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

Теперь возникает вопрос: одна страница в веб-интерфейсе приложения позволяет загружать обновление программного обеспечения размером от 11 до 40 МБ, скажем,,У нас есть различные этапы проверки при обработке этого запроса POST, например, система разрешений, основанная на файле cookie сеанса.Мы знаем, разрешено ли клиенту загружать обновление программного обеспечения, как только будут обработаны все заголовки, из-за указанного файла cookie сеанса.Есть ли какой-нибудь способ, которым мы можем избежать необходимости читать (и отбрасывать) весь контент POST, чтобы пользователи получали немедленную обратную связь?

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

Ответы [ 2 ]

0 голосов
/ 30 января 2011

Так как я недавно дал соответствующий RFC более пристальный взгляд:

В HTTP 1.1 был добавлен дополнительный заголовок запроса для такого сценария

Expect: 100-Continue

Это говорит серверу проверить заголовки запроса и вернуться либо с «OK, теперь вы можете начать посылать мне фактический контент», либо с «Извините, что бы вы ни собирались POST мне, я не смогу чтобы справиться с этим "- ответ (для более точных технических деталей, см. HTTP 1.1 RFC )

Однако это не решает мой сценарий, поскольку типичные пользовательские агенты (Firefox 3.6, IE 8) не используют эту функцию при размещении multipart / form-data. Тем не менее, приложение помощника, выращенное вручную, может использовать эту функцию.

0 голосов
/ 07 августа 2010

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

...