IIS4.0→IIS6.0に移行したサーバでCGIを動かす
IIS6.0+perlis.dllの環境下では以前のIIS4.0+Perl.exe環境と違いサーバはレスポンス時にヘッダを吐いてくれない。この点を意識していないとハマる。
とりあえず
print "Content-type: text/html\n"; print "Content-length: 100\n\n";
は書いておくこと。通常はContent-typeだけで問題ないのだがFOMAのようにContent-length必須なブラウザもあるのででっち上げでも良いのでContent-lengthを書いておくこと。
また、Locationヘッダで転送を行いたい場合
print "Status: 301 Permanently Moved"; print "Location: http://hogehoge/i/index.html";
でとりあえず301を返しておかないとブラウザ側が勝手にエラーにしてしまうことがあるので注意。Locationをつけるときは大概本文は空のはずだがその状態でStatus: 200だとダメなブラウザも存在する。要は真面目にRFC読んでそれに準拠して書けってことなんですがね・・・。
オマケ。上記を含めたindex.cgiを設置し、HTTPで会話した結果。
$ telnet 192.168.1.10 80 Trying 192.168.1.10.... Connected to 192.168.1.10. Escape character is '^]'. GET /index.cgi HTTP/1.1 User-Agent: DoCoMo HOST: 192.168.1.10 HTTP/1.1 301 Permanently Moved Location: http://hogehoge/i/index.html Content-type: text/html; charset=Shift_JIS Content-length: 80 Connection closed by foreign host.