PHP (Apache) silenciosamente convertendo HTTP 429 e outros para 500

Eu acabei de descobrir uma estranheza no método header () do PHP silenciosamente convertendo alguns dos meus status para 500. Como eu não tive sorte em encontrar menção a esse comportamento em várias pesquisas na web, estou adicionando isso aqui na esperança de salvar outros algum agravamento , mas também para perguntar se alguém descobriu uma solução melhor (seja com PHP ou Zend1) do que eu criei.

Dado um script PHP simples como:

<?php
header('HTTP/1.1 429');
echo "Too Many Requests\n";

Eu esperaria receber algo como:

HTTP/1.1 429
Date: Thu, 18 Jul 2013 22:19:45 GMT
Content-Length: 11
Content-Type: text/html; charset=UTF-8

Too Many Requests

Em vez disso, ele retorna:

HTTP/1.1 500 Internal Server Error
Date: Thu, 18 Jul 2013 22:19:45 GMT
Content-Length: 11
Content-Type: text/html; charset=UTF-8

Too Many Requests

Somando-se ao mistério, não há eventos no meu log de erro do apache, e o log de acesso mostra o código de status correto (assim diferente do que foi enviado para o navegador):

$IP - - [18/Jul/2013:16:31:34 -0700] "GET /test/429.php HTTP/1.1" 429 11 "-" "curl/7.30.0"

Tudo funciona bem ao testar com muitos outros códigos de status, como 401, 420, 426.

Tudo também funciona bem se eu for explícito e enviar o cabeçalho ('HTTP / 1.1 429 Too Many Requests'); Esta seria uma solução útil, exceto que estou usando o Zend Framework e seu método setHttpResponseCode espera um inteiro, que ele usa como o terceiro parâmetro para a função header () do php.

Eu descobri que parece aplicar-se especificamente aos status adicionados no RFC 6585 (vejahttps://github.com/php/php-src/pull/274), embora eu esteja um pouco confuso porque os status como 426 funcionam quando eles claramente não estão presentes no código-fonte para 5.4.14 e 5.4.16 (as duas versões nas quais testei), mas não funcionais como 429 está.

Atualizar:

Como as respostas indicaram, isso é principalmente um problema do Apache, não PHP, eu atualizei o título de acordo. O mais interessante parece ser que isso é corrigido apenas em certas versões do Apache (sem consistência aparente entre o antigo e o novo). Eu acredito que a questão do upstream em questão está aqui:https://issues.apache.org/bugzilla/show_bug.cgi?id=44995

questionAnswers(2)

yourAnswerToTheQuestion