Я работаю над PHP webapp, который принимает большие POSTed загрузки файлов от конкретных клиентов и хотел бы принять или отклонить эти загрузки (на основе разных заголовков и других факторов, а не только размера), прежде чем файл будет загружен с помощью 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. Я не уверен, что это возможно, поэтому у меня есть два вопроса:
В настоящее время я думаю об эмулировании 100, указав, что клиент сначала отправляет запрос HEAD с теми же заголовками, что и POST. Затем Webapp может вернуть ответ, чтобы продолжить работу с POST или кодом ошибки. Другие предложения приветствуются!
К сожалению, я не думаю, что это возможно. Если это реальное требование, я думаю, что лучше всего просто взглянуть на другие языки. Я думаю, что сегодня гетерогенные среды более распространены, чем когда этот вопрос был написан, поэтому почему бы не создать небольшую услугу, написанную на каком-то другом языке, которая просто касается загрузки.
Но да, как работает PHP, скрипт запускается только тогда, когда весь запрос отправляется клиентом.
Попытка сделать это на уровне HTTP кажется слишком сложной. Важно, чтобы разработчик не зависел от конкретного решения. Проблема в том, что вы хотите сделать серию проверок перед обработкой загрузки. Все, что вам нужно сделать, – это поставить страницу перед загрузкой. Эта отборочная страница будет показывать только форму загрузки, если они пройдут серию проверок и квалификацию. Это именно то, что вы пытаетесь сделать, только вы можете сделать это в коде PHP. Если это возможно, то HTTP 100 всегда будет требовать много дополнительной конфигурации, тем самым создавая головную боль для поддержки позже. Если вы сделаете это в коде, те, которые придут за вами (или вы сами через пару лет), сможете четко понять, что делает приложение.