ETag とステータスコード 200 or 304
ETag を入れると 304 が返らなくなるのは、 tDiary というより Web サーバ (Apache) の問題っぽい。 なので、簡単な CGI スクリプトでもう一回実験してみた。
#!/usr/local/bin/ruby require 'cgi' cgi = CGI.new head = {} head['Last-Modified'] = 'Fri, 29 Dec 2006 01:35:19 GMT' head['ETag'] = %Q("1234567890") print cgi.header(head) puts 'hello!'
今度もコマンドライン (telnet) からアクセスする。
$ telnet machu.jp 80 Trying 202.181.97.46... Connected to machu.jp. Escape character is '^]'. GET /etag.cgi HTTP/1.0 Host: www.machu.jp If-None-Match: "1234567890" HTTP/1.1 200 OK Date: Sun, 07 Jan 2007 16:09:32 GMT Server: Apache/1.3.37 (Unix) ETag: "1234567890" Connection: close Content-Type: text/html hello!
やっぱり CGI の時だけうまく動いていないのか…。
追記 (2007-01-10)
「ETag を入れると 304 が返らなくなるのは、 tDiary というより Web サーバ (Apache) の問題っぽい」という日記の内容に対して、どさにっきからツッコミを頂戴した。
問題なんてものは存在しておらず、あるとすれば Apache がやりもしないことをやってくれるという思い違いが存在していただけ。
あぁ、確かに「問題」という言い方は良くなかった。 CGI ではどっちがやると規定していないので、必要があるのなら CGI スクリプト側でちゃんと制御すべきと。 (たださんも、「CGIスクリプトが自分で判断して304を返せばいいだけ」と書いている)
Apache の挙動については中途半端なままだけど、少しは勉強になりました。