2005年02月07日

RSS検索サイトはステータスコード304を返すか

キーワードチャンネル高速化のために、If-Modified-Sinceを使うことを考えてみました。これを使えば、検索結果が前回と変わっていなければ検索サイトはステータスコード304(Not Modified)とレスポンスヘッダだけを返し、検索結果本体は転送されないので転送時間が短縮されます。

そこで気になったのが、検索サイトはステータスコード304を返すのかどうか、ということです。検索サイトは動的に検索結果を生成していると思いますので、開発者がちょっとうっかりしていると304を返さない検索サイトが出来上がるでしょう。

では、一つずつ見ていきます。
調べ方は、各検索サイトが出力するRSS FeedのURLをHeimdallrに登録し、連続で「最新の情報に更新」を実行します。このとき送信されるHTTPリクエストヘッダと受信したレスポンスヘッダを見て判断します。

Feedback

初回のリクエストに対するレスポンスヘッダは以下の通り

HTTP/1.1 200 OK
Date: Sat, 05 Feb 2005 09:38:01 GMT
Server: Apache/1.3.28 (Unix) mod_gzip/1.3.26.1a mod_perl/1.29
Vary: *
Last-Modified: Sat, 05 Feb 2005 09:14:52 GMT
Content-Type: text/xml; charset=UTF-8
Proxy-Connection: close
Connection: close

Last-Modifiedフィールドの値を次のリクエストのIf-Modified-Sinceフィールドに渡してみると、レスポンスヘッダはこうなります。

HTTP/1.1 304 Not Modified
Date: Sat, 05 Feb 2005 09:38:08 GMT
Server: Apache/1.3.28 (Unix) mod_gzip/1.3.26.1a mod_perl/1.29
Proxy-Connection: close
Connection: close
Vary: *

完璧ですね。ステータスコードは304になっています。

Bulkfeeds

初回のリクエストに対するレスポンスヘッダは以下の通り

HTTP/1.1 200 OK
Date: Sat, 05 Feb 2005 09:43:30 GMT
Server: Apache/1.3.33 (Unix) mod_perl/1.29
Content-Type: text/xml; charset=utf-8
X-Cache: MISS from bulkfeeds.net
Proxy-Connection: close
Connection: close

残念ながらLast-Modifiedフィールドがありません。 そのためIf-Modified-Sinceフィールドの設定ができず、毎回データを取得しまっているようです。

未来検索livedoor

初回のリクエストに対するレスポンスヘッダは以下の通り

HTTP/1.1 200 OK
Date: Sat, 05 Feb 2005 09:51:10 GMT
Server: Apache/1.3.31 (Unix) mod_perl/1.29
Set-Cookie: sledge_sid=47341abc81555667821d40239b66ad36; path=/
Content-Length: 7290
Content-Type: text/xml; charset=UTF-8
X-Cache: MISS from rss.sf.livedoor.com
Proxy-Connection: close
Connection: close

残念ながらLast-Modifiedフィールドがありません。

もぶろげっとβ

キーワードチャンネルではもぶろげっとβは使用しておりませんが、試しにこれも調べてみます。

初回のリクエストに対するレスポンスヘッダは以下の通り

HTTP/1.1 200 OK
Proxy-Connection: close
Connection: close
Date: Sat, 05 Feb 2005 09:46:28 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Set-Cookie: ASP.NET_SessionId=35fux3iiqlsf5uq2bcmbghns; path=/
Cache-Control: private
Content-Type: application/xml; charset=utf-8
Content-Length: 15135

これも残念ながらLast-Modifiedフィールドがありません。
全然話と関係ありませんがもぶろげっとってIIS + ASP.NETで作られているんですね。

結論

というわけで、If-Modified-Sinceが使えるのは(というかLast-Modifiedが分かるのは)Feedbackだけです。これだけ高速化してもあまり意味がないので、キーワードチャンネルのIf-Modified-Since対応は後回しにしたいと思います。

投稿者 MASATO : 2005年02月07日 01:26 | トラックバック
コメント

こんばんわ

全然関係ないんですが、ツイ見てしまったのでしゃしゃりでてます

そのLast-Modifiedは多分index更新を行った日付です。
検索結果をキャッシュするまでもないです。
同じindexに同じ検索語であれば同じ結果が返ることが保証できれば日付チェックだけで十分です。

Posted by: rentahero : 2005年09月19日 23:53

ちょっとうっかり言われちゃいましたが
スクリプト側では304返そうとしてもApache側で処理がうまくいかなかったりそれなりに問題あります・・・

Feedbackが何をもって304と判断しているのかも気になります、検索で304出すには検索結果をサーバー内にキャッシュしているのでしょうか・・・謎です

Posted by: 瞳子 : 2005年02月08日 18:17
コメントする









名前、アドレスを登録しますか?