複数のサーバを使ってサービスを運用している時に、サーバによって動作が異なることがあります。そのために不可解なエラーにハマったりする訳ですが、チェックするのが意外と面倒です。 そこで使ってみたいのがhttpdiffです。2つのサーバ間におけるヘッダー情報の差分を表示してくれます。

httpdiffの使い方

例えば以下のような実行をします。

$ httpdiff http://www.google.co.jp http://www.google.com/?gws_rd=cr
Doing GET: 
    http://www.google.co.jp
    http://www.google.com/?gws_rd=cr 
Content-Type header different:
    text/html; charset=Shift_JIS
    text/html; charset=ISO-8859-1
Set-Cookie header different:
    PREF=ID=c552d43dd575889f:FF=0:TM=1427673199:LM=1427673199:S=idAEXMvx2sRxJq-2; expires=Tue, 28-Mar-2017 23:53:19 GMT; path=/; domain=.google.co.jp
    PREF=ID=50d2e35b1a1a36a9:FF=0:TM=1427673199:LM=1427673199:S=7vry2b8Io4kZWfsO; expires=Tue, 28-Mar-2017 23:53:19 GMT; path=/; domain=.google.com
Set-Cookie header different:
    NID=67=DC8xDSKZSJs4ZJBgQrpjubvlzf00yZk9w5k-k1cE1gIQ9ZJMZtRsH0hatPr34FvN0spAcuVYBiedplqTSBSVGn5pnr7G6fel-mitxpaHffFSzxyCX5SUD7eN-Q-CxdMK; expires=Mon, 28-Sep-2015 23:53:19 GMT; path=/; domain=.google.co.jp; HttpOnly
    NID=67=S-XrT2Kg93xqf7Aa9oSKYL2PCvNwnaBP4rmEDLP03fvRPQf9r0WbkjdT0ke-BGxC252W_4SyO3sffLiFaYlzzDnqlM7icZKmVZfACm9aNBU_oZ-UoiZJ3J4j6iBAEKHK; expires=Mon, 28-Sep-2015 23:53:19 GMT; path=/; domain=.google.com; HttpOnly
Body lengths differ:
    18080
    17927
    Wrote body of http://www.google.co.jp to /var/folders/bw/gkhg6k2948x27hmyj9tc9y0c0000gn/T/httpdiff898763466
    Wrote body of http://www.google.com/?gws_rd=cr to /var/folders/bw/gkhg6k2948x27hmyj9tc9y0c0000gn/T/httpdiff227573665

これはGoogleのco.jpとcomのレスポンスをチェックしています。こうした外部に公開されたサーバはもちろん、リバースプロキシの後ろにある各サーバごとに実行して動作をチェックするのも良さそうです。

メソッドはデフォルトでGETですが、HEADやOPTIONSを呼ぶことも可能です。この他、サンプルとしてはhttpとhttpsの違いを見るといった使い方もできます。

httpdiffはGo製、GPLのオープンソース・ソフトウェアです。

jgrahamc/httpdiff