pl: CGI.pm-Alternative

Beitrag lesen

Auch das ist CGI.pm:

If POSTed data is not of type application/x-www-form-urlencoded or multipart/form-data, then the POSTed data will not be processed, but instead be returned as-is in a parameter named POSTDATA. To retrieve it, use code like this:... Likewise if PUTed data.

WTF! Und was haben PSGI oder Plack dieser Unlogik entgegenzusetzen? Nichts! Da wurde nämlich selbst mit PHP besser verstanden, dass es unabhängig vom gesendeten Content-Type sowohl aus STDIN als auch aus der Serverumgebung (QUERY_STRING) Daten zu lesen gibt.

Genaugnommen wären aus STDIN nur dann Daten (HTTP-Request-Body) zu lesen, wenn der Client die Anzahl der zu lesenden Bytes > 0 in einem Request-Header namens Content-Length sendet UND der Webserver diese Angabe als CONTENT_LENGTH in die Serverumgebung setzt -- Und das ist sowohl vom Content-Type als auch von der Request-Methode unabhängig.

Praktisch ist STDIN nur dann zu lesen, wenn die Request-Methode PUT oder POST ist. Auch dieser Fakt ist in CGI.pm mangelhaft interpretiert, ich zitiere:

If set $CGI::POST_MAX to a non-negative integer, this variable puts a ceiling on the size of POSTings, in bytes. If CGI.pm detects a POST that is greater than the ceiling, it will immediately exit with an error message. This value will affect both ordinary POSTs and multipart POSTs, meaning that it limits the maximum size of file uploads as well. You should set this to a reasonably high value, such as 10 megabytes.

Da kann also jeder diese Regel umgehen, indem er eine andere Request-Methode wählt. Was hat PSGI dem entegenzusetzen? Nichts!

Allein aus den seit 20 Jahren in CGI.pm verbauten Unzulänglichkeiten siehst Du doch selbst, dass PSGI/Plack keine Alternative ist. Die einzige Alternative ist, den Mängeln in CGI.pm mit einer zweckmäßigen Art und Weise der Programmierung zu begegnen wozu auch ein sinnvoller Einsatz der OOP gehört -- und genau das war schon im Jahr 2001 möglich, also ab Version 5.

Die Entscheidung für Middleware wie Plack usw. musst Du freilich selber treffen. Ich empfehle dir jedoch, Du solltest Dich einmal mehr mit den Gundlagen befassen um den Stellenwert solcher Frameworks überhaupt einschätzen zu können.

Schönen Tag auch 😉