cat ou echo são ambos aceitáveis. Em ambos os casos, os dados são padronizados.
Uma resposta HTTP pode ser enviada com a seguinte função bash:
#
# The HTTP response
# Syntax: http_response 200 "Success Message"
# http_response 503 "Service Unavailable Message"
#
http_response () {
HTTP_CODE=$1
MESSAGE=${2:-Message Undefined}
length=${#MESSAGE}
if [ "$HTTP_CODE" -eq 503 ]; then
echo -en "HTTP/1.1 503 Service Unavailable\r\n"
elif [ "$HTTP_CODE" -eq 200 ]; then
echo -en "HTTP/1.1 200 OK\r\n"
else
echo -en "HTTP/1.1 ${HTTP_CODE} UNKNOWN\r\n"
fi
echo -en "Content-Type: text/plain\r\n"
echo -en "Connection: close\r\n"
echo -en "Content-Length: ${length}\r\n"
echo -en "\r\n"
echo -en "$MESSAGE"
echo -en "\r\n"
sleep 0.1
exit 0
}
Eu escrevi um serviço mini bash-http para o xinetd que pode ser útil.
link
Ele aceita solicitações HTTP / 1.0, incluindo a análise de cabeçalhos HTTP, como a solicitação e os parâmetros HTTP. E retorna uma resposta HTTP apropriada. Também é compatível com linhas de comando.
bash~$ echo "GET /weight-value?inverse-weight=0&max-weight=100 HTTP/1.0" | xinetdhttpservice.sh --http-status
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 15
WEIGHT_VALUE=99