- ベストアンサー
P504i(iモード)でlocationは使用できない?
Prelにてiモード用の掲示板CGIを作成したのですが投稿後、掲示板のメイン画面に戻るように print "Location: $CGI\n\n"; としたわけです。$CGIは掲示板自体がある絶対パスです。 いざ投稿するとデーターには書きこみはされるのですが無効なデーターを受信しましたとでるんです。 これはN502iでは出ないのです。いまのところP504iしか報告がないため他の機種はわかりませn。 どなたかご教授お願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1 の私の回答、typo でしたね。 「print "Location: 'http://www~」に余計なシングルクオートが入ってました。 >> スキーム名から始まる absoluteURI は、その名の通り、http:// 等のスキーム名に、FQDN とフルパスを結合した絶対 URI です。 > $CGI='http://www.yourdomain.net/cgi/bbs.cgi\n\n'; > として > print "Location: '$CGI\n\n"; > とするとまずいということですか? 厳密には、' (シングルクオート) で囲まれた \n は、改行とみなされず、\ と n の二文字とされちゃうので、厳密には違います。 ただ、 $CGI = 'http://www.yourdomain.net/cgi/bbs.cgi'; print "Location: $CGI\n\n"; なら問題ないと思います。 また、これでもエラーが出る場合、よく言われている「i-mode は機種によって Content-Length ヘッダを出力しないと正常に動作しない」っていう問題 (以下 URL 参照) かもしれません。 Location を出力した場合のエンティティ部は何もなくても問題はないと思うので、 print "Content-Length: 0\n"; print "Location: $CGI\n\n"; とすれば、動作する可能性があります。
その他の回答 (1)
- nipotan
- ベストアンサー率59% (134/227)
> print "Location: $CGI\n\n"; > としたわけです。$CGIは掲示板自体がある絶対パスです。 フールド値で、絶対パスではなくて absoluteURI (絶対 URI) 指定しましたか? CGI/1.1 (期限切れ draft) の仕様では、Location ヘッダに出力する際に、DocumentRoot からのパスの記述 (httpd サーバ上の絶対パス) が可能であるという事になっています (多くの PC 用 UA はこれに対応済み) が、iモードでは、それに対応していない端末も存在します。 当然、"期限切れ" の draft に対応していなくても、一応 HTTP 及び CGI には対応していると言えるので、絶対パスで正常に動作しなくても「まったくおかしなことではありません」。 一応、DoCoMo のサイト上では「LOCATION時のURLの指定は絶対パスで記述して下さい。」と書いてありますが、この「絶対パス」は恐らく absoluteURI を指すのだと思われます。 なので、スキーム名から始まる absoluteURI を記述すれば、解決するような気がします。 print "Location: 'http://www.your.domain$CGI\n\n"; としてみてはいかがでしょうか。
補足
早速のお答え有難うございます。 さて、何点かわからないことがありますので再度質問させてください。 >スキーム名から始まる absoluteURI を記述すれば、解決するような気がします。 >print "Location: 'http://www.your.domain$CGI\n\n"; >としてみてはいかがでしょうか。 とありますが、 $CGI='http://www.yourdomain.net/cgi/bbs.cgi\n\n'; として print "Location: '$CGI\n\n"; とするとまずいということですか? >スキーム名から始まる absoluteURI という言葉自体がわからなかったので・・・ 他の人が簡単に設定できるようにしたいのですが。 すみません。おねがいします
お礼
なるほど。わかりました。 Content-Length: も必要なんですね。 ありがとうございます。やってみます