先の"gzip 圧縮された RSS フィードに対応した RSS リーダーは?"という記事で、幾つかの RSS リーダーについて gzip 圧縮された RSS フィードを扱えるかどうかを調べてみました。その後、単純に CGI なりを使って HTTP ヘッダを書き出せばいいんじゃね?と思い立ったのでこちらについても試してみました。
下のようなCGIを作成し、各RSSリーダーからのリクエストをログに残すようにします。このCGI自体は適切なRSSを返さないためエラーとなります。
#!/usr/bin/perl $| = 1; print "Content-type: text/plain "; map { printf "%s = %s ", $_, $ENV{$_}; } sort keys %ENV; if (open (FH, ">>dump.txt")) { map { printf FH "%s = %s ", $_, $ENV{$_}; } sort keys %ENV; printf FH " "; close FH; }
HTTP_CONNECTION = TE, close HTTP_HOST = www.magicvox.net HTTP_TE = deflate,gzip;q=0.3 HTTP_USER_AGENT = Hatena RSS/0.3 (http://r.hatena.ne.jp) REMOTE_ADDR = 221.186.146.26 REMOTE_HOST = ns.hatena.ne.jp REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_CONNECTION = TE, close HTTP_HOST = www.magicvox.net HTTP_TE = deflate,gzip;q=0.3 HTTP_USER_AGENT = Feed::Find/0.06 HTTP_USER_AGENT = livedoor HttpClient/0.1 REMOTE_ADDR = 203.131.194.84 REMOTE_HOST = ldnatvip.livedoor.com REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_ACCEPT_ENCODING = gzip HTTP_HOST = www.magicvox.net HTTP_USER_AGENT = Feedfetcher-Google; (+http://www.google.com/feedfetcher.html) REMOTE_ADDR = 72.14.194.37 REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_ACCEPT_ENCODING = gzip, deflate HTTP_CONNECTION = Close HTTP_HOST = www.magicvox.net HTTP_USER_AGENT = SharpReader/0.9.7.0 (.NET CLR 1.1.4322.2032; WinNT 5.1.2600.0) REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET = Shift_JIS,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING = gzip,deflate HTTP_ACCEPT_LANGUAGE = ja,en-us;q=0.7,en;q=0.3 HTTP_CONNECTION = keep-alive HTTP_HOST = www.magicvox.net HTTP_KEEP_ALIVE = 300 HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.9) Gecko/20061207 Thunderbird/1.5.0.9 REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET = Shift_JIS,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING = gzip,deflate HTTP_ACCEPT_LANGUAGE = ja,en-us;q=0.7,en;q=0.3 HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = keep-alive HTTP_HOST = www.magicvox.net HTTP_KEEP_ALIVE = 300 HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9 REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
HTTP_ACCEPT = text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 HTTP_ACCEPT_CHARSET = iso-8859-1, utf-8, utf-16, *;q=0.1 HTTP_ACCEPT_ENCODING = deflate, gzip, x-gzip, identity, *;q=0 HTTP_ACCEPT_LANGUAGE = ja-JP,ja;q=0.9,en;q=0.8 HTTP_CONNECTION = Keep-Alive, TE HTTP_HOST = www.magicvox.net HTTP_TE = deflate, gzip, chunked, identity, trailers HTTP_USER_AGENT = Opera/9.10 (Windows NT 5.1; U; ja) REQUEST_METHOD = GET SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1
やはり、圧縮された RSS フィードを読めない RSS リーダは、Accept-Encoding: gzip
を明示していませんでした(当たり前) Web ベースの RSS リーダーだから?とも思いましたが、Google Reader は gzip 転送に対応しているようですし、まぁ、単なる Fetcher の違いだと思います。また、はてな RSS、livedoor Reader からのリクエストではHTTP_TE
という項目に gzip の設定値が見られますが、プロキシの転送エンコード(?)とのことで余り関係は無さそうです。