Intereting Posts
Создание веб-страницы с учетными записями пользователей, что мне нужно иметь в виду? Можете ли вы использовать построитель запросов для построения запроса с динамическим предложением WHERE во время выполнения в laravel? Каков наилучший способ загрузки и хранения изображений на сайте? Ошибка PHP и MySQL: объект класса mysqli_result не может быть преобразован в строку PHP mysql звездный рейтинг Преобразуйте эту строку в метку времени PHP API событий Facebook Как обращаться с выходом пользователя в браузере с несколькими вкладками? автоматический выход из системы всех открытых вкладок при выходе из одного из них Как получить тип поля базы данных в Laravel? Laravel с использованием UNION в построителе запросов Отладка PHP на OS X – безнадежная? добавить новый элемент в объект коллекции laravel Нужно ли мне избегать данных для защиты от SQL-инъекций при использовании bind_param () в MySQLi? ArrayAccess многомерный (un) набор? Пустая строка вместо нулевых значений Eloquent

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

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

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

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

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

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

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