Añadiendo algo de información más tarde, ya que me encontré con esta pregunta mientras investigaba algo relacionado.
creo que el campo de encabezado de estado fue inventado originalmente como parte de la especificación CGI, RFC 3875:
https://tools.ietf.org/html/rfc3875#section-6.3.3
Para citar:
The Status header field contains a 3-digit integer result code that
indicates the level of success of the script's attempt to handle the
request.
Status = "Status:" status-code SP reason-phrase NL
status-code = "200" | "302" | "400" | "501" | extension-code
extension-code = 3digit
reason-phrase = *TEXT
Permite un script CGI para devolver una código de estado al servidor web que anula el valor predeterminado visto en la línea de estado HTTP. Por lo general, el servidor almacena el resultado de la secuencia de comandos y emite un nuevo encabezado para el cliente. Este es un encabezado HTTP válido que comienza con una línea de estado HTTP modificada y omite el campo de encabezado "Estado:" de las secuencias de comandos (más algunas otras transformaciones ordenadas por el RFC).
De modo que todos sus ejemplos son válidos desde un script CGI, pero solo el primero es realmente válido en un encabezado HTTP. Los dos últimos solo son válidos provenientes de un script CGI (o quizás una aplicación FastCGI).
Una secuencia de comandos CGI también puede funcionar en el modo "encabezado no analizado" (NPH), cuando genera un encabezado HTTP completo y válido que el servidor web pasa al cliente palabra por palabra. Como tal, esto no debería incluir un campo de encabezado Status:
Nota, lo que me interesa es qué estado debería ganar si un script de NPH se equivoca y emite el campo de encabezado Status: posiblemente además de la línea de estado HTTP. No puedo encontrar ninguna indicación clara así y sospecho que se deja a la implementación de lo que sea que esté analizando el resultado, ya sea el cliente o el servidor.