先日小堀さんより「Movable Type から PyCS にトラックバック ping を送信すると失敗するう!」という連絡をいただきまして調べてみたところ、Movable Type 2.64 からの トラックバック ping が POST じゃなくて GET メソッドで送られているのですわ。ナンですか、これ?仕様書には次のようにはっきり書かれているのですけど。
Note: in older versions of the TrackBack specification, pings are sent using HTTP GET requests. This behavior is deprecrated; support for GET requests will be removed from the Movable Type implementation in January of 2003.
ちなみに Movable Type 2.64 のリリースは2003年5月ね。さらに小堀さんにコードを調べていただいたところ、該当部分はこんなん書かれてるそうです
なるほどこれは仕様書とは違う実装になっているわけで、修正すべきですね。
ただこういうコードになっている理由はなんとなくわかります。Trackback URL に ? がついているということは、素直にやると
POST /trackback?entry_id=111
Content-Type: application/www-form-urlencoded
blog_name=hogehoge&title=fugafuga
みたいになるわけで、STDIN からデータをとりつつ、entry_id は QUERY_STRING からとるという、ちょっとヘンな実装に(サーバサイドが)なるので、GET にしたのでしょう。
tb-standalone や MT ではこうした問題をさけるために、entry_id は PATH_INFO からとるようにしています。
しかしサーバ側の実装は、送る側は考えるべきでないともスペックには書いてあるわけで、意図はわかるけども、実装としてはこうした余計な処理はすべきでないですね。(仕様書がある以上は)