cgic でリダイレクト
2007/10/26
Webアプリでは、POSTの後に描画する画面は、再描画(リロード)するときにPOSTしたデータを再送信しないと表示できないので、POSTのリクエストのレスポンスでは、リダイレクトさせるだけにするのが普通ですが、cgicで、どうゆう訳かそれを実現できませんでした。
cgicでは、void cgiHeaderLocation(char *redirectUrl) が用意されています。
これを使うとブラウザでは、cgiHeaderLocationで指定したurlの結果の画面が表示されるのですが、ブラウザのアドレスバーは、POST先のURLのままでした。<C-R>でリロードすると、「再送信しないと取得できません。」のダイアログが出てしまいます。これでは何も解決してません。
cgiHeaderLocationの実装も何の変哲もないんですが。
void cgiHeaderLocation(char *redirectUrl) { fprintf(cgiOut, "Location: %s\r\n\r\n", redirectUrl); }
cgiHeaderLocationで返したレスポンスが、ブラウザまで届いてないのかな。Webサーバとかプロキシとかが、ありがた迷惑なことをしてくれているのだろうか。
引き続き調査が必要です。#これが解決しないとダサい完了画面を表示しなければならないので。
Live HTTP Headers や ieHTTPHeaders、あるいは Packetyzer, WireShark,
Squeezer, Etherealで HTTPレスポンスヘッダを確認してみては。
discypusさん、コメントありがとうございます。
レスポンスheaderまわりを調査してみました。結局、statusヘッダを返してあげる必要があったようでした。http://d.hatena.ne.jp/smeghead/20071027/cgicredirect おがけ様でなんとか解決できました。