にHTTP 429などの変換私は(PHPのヘッダで風変わりを発見した)私は、さまざまなWeb検索で、この動作の言及を見つけることに運がなかったので黙っ500に私のステータスの一部を変換する方法、私は私が作ってみたよりも他にいくつかの悪化を保存するのを期待してここにこれを追加するんだけど、誰もが(どちらかPHPまたはZend1で)より良い回避策を発見した場合にも依頼します。PHP(アパッチ)黙っ500
考えるような単純なPHPスクリプト:私は何か受け取ることを期待する
<?php
header('HTTP/1.1 429');
echo "Too Many Requests\n";
:
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
は代わりに、それは実際に返されます。
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
謎に追加します、そこ私のApacheのエラーログにイベントされず、アクセスログは、正しいステータスコード(したがってジを示し)ブラウザに送信されてしまったものとはfferent:401、420のような他の多くのステータスコードをテストするとき
$IP - - [18/Jul/2013:16:31:34 -0700] "GET /test/429.php HTTP/1.1" 429 11 "-" "curl/7.30.0"
すべてが、私は、明示的だと(ヘッダを送信する場合426
すべてはまた、正常に動作し、正常に動作します'HTTP/1.1 429リクエストが多すぎます');これは私は、Zend FrameworkのそのsetHttpResponseCode法を使用しているが、それはPHPのヘッダ()関数の3番目のパラメータとして使用して整数を期待していることを除いて有用な回避策であろう。
私はそれが明らかにRFC 6585(詳細はhttps://github.com/php/php-src/pull/274を参照)に追加されたステータスに適用されているようだが、なぜ426のようなステータスが明らかにソースコードに存在しない5.4.14と5.4.16が、429のような非機能的なものである(私はに対してテストした二つのバージョン)。
更新:
回答が示されているように、これは主に、Apacheの問題ではなく、PHPで、私はそれに応じてタイトルを更新しました。最も興味深いのは、これは(古いものと新しいものとの間に明白な一貫性)のみのApacheの特定のバージョンで修正されていることのようです。問題の上流の問題はここにあります:https://issues.apache.org/bugzilla/show_bug.cgi?id=44995
は、ここにリンクだ私は似たようなテストした最後の時間は、結論はこのように見えましたPHPソースに429があることを示しています:https://github.com/php/php-src/blob/PHP-5.4.14/sapi/cgi/cgi_main.c#L388 –
FWIWこれを欺くことはできません5.4.16の組み込みのdevサーバ。 Apacheを使ってテストしていますよね? – Charles
リターンコードを設定するパラメータもあります。あなたはそれを試しましたか?また、100から499ステップの大きさまでのコードを多く入れ替えるスクリプトは、可能なものと不可能なものを知っていると良いでしょう。また、コンテキストが明確になるように、PHP SAPIと同様に使用しているウェブサーバーとバージョンを教えてください。 – hakre