Поддержка HTTP 100 Продолжить с PHP - PullRequest
13 голосов
/ 12 февраля 2010

Я работаю над веб-приложением PHP, которое принимает большие POST-файлы для загрузки от определенных клиентов и хотело бы принять или отклонить эти загрузки (на основе различных заголовков и других факторов, а не только размера) перед загрузкой файла с использованием HTTP /1.1 100 Продолжить.

Некоторый быстрый фон из HTTP / 1.1 spec 8.2.3 :

Цель статуса 100 (Продолжить) (см. Раздел 10.1.1) состоит в том, чтобы позволить клиенту, отправляющему сообщение запроса с телом запроса, определить, желает ли исходный сервер принять запрос (на основе заголовки запроса) до того, как клиент отправит тело запроса. В некоторых случаях отправка тела может быть неуместной или крайне неэффективной, если сервер отклонит сообщение, не глядя на тело.

Проблема в том, что Apache видит Expect: 100-continue от клиента, возвращает 100 Continue и принимает загрузку файла все до того, как PHP начнет обработку ... Однако мне нужно PHP, чтобы начать обработку сразу после Expect: 100- Продолжить. Я не уверен, возможно ли это, поэтому у меня есть два вопроса:

  1. Можно ли заставить PHP начать обработку сразу после Expect: 100-continue?
  2. Если нет, то что является хорошей альтернативой?

В настоящее время я думаю продолжить эмуляцию 100, указав, что клиент сначала отправляет запрос HEAD с теми же заголовками, что и POST. Веб-приложение может затем вернуть ответ, чтобы продолжить с POST или кодом ошибки. Другие предложения приветствуются!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2016

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

Но да, PHP работает так, что скрипт запускается только тогда, когда клиент отправляет весь запрос.

0 голосов
/ 13 февраля 2010

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

...