cgic でリダイレクト

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サーバとかプロキシとかが、ありがた迷惑なことをしてくれているのだろうか。

引き続き調査が必要です。#これが解決しないとダサい完了画面を表示しなければならないので。

2件のコメント

  • Live HTTP Headers や ieHTTPHeaders、あるいは Packetyzer, WireShark,
    Squeezer, Etherealで HTTPレスポンスヘッダを確認してみては。

  • discypusさん、コメントありがとうございます。
    レスポンスheaderまわりを調査してみました。結局、statusヘッダを返してあげる必要があったようでした。http://d.hatena.ne.jp/smeghead/20071027/cgicredirect おがけ様でなんとか解決できました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください