13 Stimmen

Unterstützung von HTTP 100 Continue mit PHP

Ich arbeite an einer PHP-Webapp, die große POSTed Dateiuploads von bestimmten Clients akzeptiert und möchte diese Uploads (basierend auf verschiedenen Headern und anderen Faktoren, nicht nur Größe) akzeptieren oder ablehnen, bevor die Datei mit HTTP/1.1 100 Continue hochgeladen wird.

Einige kurze Hintergrundinformationen aus HTTP/1.1 spec 8.2.3 :

Der Zweck des Status 100 (Continue) (siehe Abschnitt 10.1.1) besteht darin, einem Client, der eine Anforderungsnachricht mit einem Anforderungsrumpf sendet, die Möglichkeit zu geben, festzustellen, ob der Ursprungsserver bereit ist, die Anforderung (auf der Grundlage der Anforderungs-Header) zu akzeptieren, bevor der Client den Anforderungsrumpf sendet. In einigen Fällen könnte es für den Client entweder unangemessen oder höchst ineffizient sein, den Body zu senden, wenn der Server die Nachricht ablehnt, ohne sich den Body anzusehen.

Das Problem ist, dass der Apache das Expect: 100-continue vom Client sieht, ein 100 Continue zurückgibt und den Dateiupload akzeptiert, bevor PHP mit der Verarbeitung beginnt... Ich möchte jedoch, dass PHP sofort nach dem Expect: 100-continue mit der Verarbeitung beginnt. Ich bin mir nicht sicher, ob das möglich ist, daher habe ich zwei Fragen:

  1. Ist es möglich, PHP dazu zu bringen, sofort nach dem Expect: 100-continue mit der Verarbeitung zu beginnen?
  2. Wenn nicht, was ist eine gute Alternative?

Ich denke derzeit darüber nach, 100 continue zu emulieren, indem ich vorschreibe, dass der Client zunächst eine HEAD-Anfrage mit denselben Kopfzeilen wie die POST-Anfrage sendet. Die Webapplikation kann dann eine Antwort zurückgeben, um mit dem POST fortzufahren, oder einen Fehlercode. Andere Vorschläge sind willkommen!

1voto

Evert Punkte 82608

Leider glaube ich nicht, dass dies möglich ist. Wenn dies eine echte Anforderung ist, denke ich, dass es am besten ist, sich einfach andere Sprachen anzuschauen. Ich denke, dass heterogene Umgebungen heute üblicher sind als zu der Zeit, als diese Frage geschrieben wurde. Warum also nicht einen kleinen Dienst in einer anderen Sprache erstellen, der sich nur mit dem Upload befasst.

Aber ja, PHP funktioniert so, dass das Skript erst startet, wenn die gesamte Anfrage vom Client gesendet wurde.

-6voto

Daniel Ice Punkte 72

Der Versuch, dies auf der HTTP-Ebene zu tun, scheint zu schwierig. Als Entwickler ist es wichtig, sich nicht auf eine bestimmte Lösung festzulegen. Das Problem ist, dass Sie eine Reihe von Prüfungen durchführen wollen, bevor Sie den Upload durchführen. Alles, was Sie tun müssen, ist, eine qualifizierende Seite vor dem Upload zu platzieren. Auf dieser Qualifizierungsseite wird das Upload-Formular nur dann angezeigt, wenn der Benutzer die Reihe von Prüfungen besteht und sich qualifiziert. Das ist genau das, was Sie zu tun versuchen, nur können Sie es im PHP-Code tun. Wenn es möglich ist, wird die HTTP-100-Sache immer eine Menge zusätzlicher Konfiguration erfordern, was dem Support später Kopfschmerzen bereiten wird. Wenn Sie es im Code machen, werden die, die nach Ihnen kommen (oder Sie selbst in ein paar Jahren), in der Lage sein, klar zu verstehen, was die Anwendung tut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X