Я думаю, что это ошибка Apache. Я нашел это:
https://grokbase.com/t/apache/bugs/108ht7t086/do-not-reply-bug-49767-new-no-last-chunk-0-after-post-request-on-cgi-script
https://bz.apache.org/bugzilla/show_bug.cgi?id=49766
https://bz.apache.org/bugzilla/show_bug.cgi?id=49767
Я отправил запрос HTTP POST в этот сценарий CGI bash:
#!/bin/bash
echo -e -n "Content-type: text/plain\n\n"
echo hello world!
Что может быть более невинным? Я был шокирован, увидев, что Апач отвечает частями! И это еще не все: ответ даже ошибочен! Последний кусок нулевой длины отсутствует. Есть только один кусок.
Возвращаются следующие заголовки:
HTTP/1.1 200 OK
Date: Sun, 13 Oct 2019 12:19:23 GMT
Server: Apache
Upgrade: h2,h2c
Connection: Upgrade, Keep-Alive
Keep-Alive: timeout=5, max=100
Transfer-Encoding: chunked
Content-Type: text/plain
Не исправлена ли эта ошибка? Согласно сообщениям об ошибках выше, «решение» (обходной путь) состоит в том, чтобы прочитать все опубликованные данные, прежде чем выводить что-либо. Когда я сделал это:
#!/bin/bash
echo -e -n "Content-type: text/plain\n\n"
input=$(cat)
echo hello world!
, последний фрагмент нулевой длины присутствует;). Это как-то предполагаемое поведение или это ошибка? Почему они не исправят это? Нужно ли читать ВСЕ входные данные, чтобы избежать ошибки или? Кто-нибудь здесь с дополнительной информацией об этой проблеме?