12

特定のクライアントからの大きな POST ファイルのアップロードを受け入れる PHP Web アプリケーションに取り組んでおり、ファイルが HTTP/1.1 100 を使用してアップロードされる前に、(サイズだけでなく、さまざまなヘッダーやその他の要因に基づいて) これらのアップロードを受け入れまたは拒否したいと考えています。継続する。

HTTP/1.1 仕様 8.2.3からのいくつかの簡単な背景:

100 (Continue) ステータス (セクション 10.1.1 を参照) の目的は、リクエスト本文を含むリクエスト メッセージを送信しているクライアントが、オリジン サーバーがリクエストを受け入れるかどうかを (リクエスト ヘッダーに基づいて) 判断できるようにすることです。クライアントがリクエストボディを送信する前。場合によっては、サーバーが本文を確認せずにメッセージを拒否する場合、クライアントが本文を送信することは不適切または非常に非効率的である可能性があります。

問題は、Apache がクライアントから Expect: 100-continue を認識し、PHP が処理を開始する前に 100 Continue を返し、ファイルのアップロードを受け入れることです...ただし、Expect: 100-continue の直後に処理を開始するには、PHP が必要です。これが可能かどうかわからないので、2つの質問があります。

  1. Expect: 100-continue の直後に PHP の処理を​​開始することは可能ですか?
  2. そうでない場合、良い代替手段は何ですか?

私は現在、クライアントが最初に POST と同じヘッダーを持つ HEAD リクエストを送信するように指定して、100 の継続をエミュレートすることを考えています。その後、webapp は、POST またはエラー コードを続行するための応答を返すことができます。他の提案は大歓迎です!

4

2 に答える 2

1

残念ながら、これは不可能だと思います。これが本当に必要な場合は、単純に他の言語を検討するのが最善だと思います。今日では、この質問が書かれたときよりも異種環境が一般的になっていると思います。そのため、アップロードだけを扱う他の言語で書かれた小さなサービスを作成してみませんか。

しかし、はい、PHP の仕組みは、クライアントからリクエスト全体が送信されたときにのみスクリプトが開始されるというものです。

于 2016-12-11T06:34:05.043 に答える
-6

HTTP レベルでこれを行うのは難しすぎるようです。開発者として、特定のソリューションにこだわらないことが重要です。問題は、アップロードを処理する前に一連のチェックを行う必要があることです。あなたがする必要があるのは、アップロードの前に適格なページを置くことだけです. この認定ページには、一連のチェックに合格して認定された場合にのみ、アップロード フォームが表示されます。それはまさにあなたがやろうとしていることであり、コード PHP でのみ実行できます。可能であれば、HTTP 100 には常に多くの追加構成が必要になるため、後でサポートする際に頭痛の種になります。コードでそれを行うと、あなたの背後にいる人 (または数年後のあなた自身) は、アプリが何をしているかを明確に理解できるようになります。

于 2010-02-13T15:27:25.340 に答える