Поддержка HTTP 100 Продолжить с PHP

Я работаю над веб-приложением 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-continue. Я не уверен, возможно ли это, поэтому у меня есть два вопроса:

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

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

2 ответа

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

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

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

Другие вопросы по тегам