• ベストアンサー

Location:ヘッダにネットワークパスを使うと FireFox で使えない?

OS:Windows-Xp(sp3)を使用しています。 IEは6.0、FireFoxは3.0.6を使っています。 http://sv01/cgi/downtest.cgi の位置にある、cgiを動作させたときに、そのCGIの中で、 print "Location: \\docsvr\test\data.lzh\n"; と書いてあると、 IEでは、\\docsvr\test\data.lzh ファイルのダウンロード確認画面が出てくることに対して、 FireFoxでは、HTTP 404 - ファイルが見つかりません。エラーになります。 その際、URL欄に、 http://sv01/cgi/\\docsvr\test\data.lzh のように表示されています。 FireFoxアドインの Live HTTP headersでモニタすると、 ------------------------------------------------- HTTP/1.x 301 Permanent Location: \\docsvr\test\data.lzh : と表示されますので、これは、FireFoxの仕様か設定かと思うのですが、 また、手で、FireFoxのURL欄に、 \\docsvr\test\data.lzh と書いてリターンすると、ファイルのダウンロード画面が出ますので、 CGIで実行時に、余分な、”http://sv01/cgi/”の文字を付与させなければ、良さそうなのですが、 IEと同様にファイルのダウンロード画面を呼び出させるためには、 何か方法があるでしょうか。

  • goku3
  • お礼率78% (97/123)
  • CGI
  • 回答数5
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

まだ閉じられていないようなので補足。 CGIの仕様(perlやphpとApacheの間で実行される規格)では Locationヘッダに対して絶対パスは文法に適合しています。 例 print "Location: /docsvr/test/data.lzh\n"; HTTPの仕様としてLocationヘッダは絶対URLでなければならないのですが、 ApacheはCGIアプリケーションからのLocationヘッダを絶対URLへの書き換えを行わないため、このときに文法違反が起こります。 そのため、CGIとしては文法に適合していても、絶対URLで出力する事をおすすめします。 スキーム名(http://やfile://など)から始まらないURLが指定された場合は、 ブラウザの独自仕様で現在のドメイン名やパスを補完するようです。

参考URL:
http://okwave.jp/qa2428571.html

その他の回答 (4)

回答No.5

訂正です。 フルパスは/docsvr/test/data.lzhではなく、 /usr/home/username/public_html/docsvr/test/data.lzh というようなパスで、 上記の/docsvr/test/data.lzhは絶対パスですね。 ついでに相対パスは./docsvr/test/data.lzhみたいな形です。 > そのため、CGIとしては文法に適合していても、絶対URLで出力する事をおすすめします。 語弊があるので訂正。 そのため、CGIの仕様にかかわらず絶対URLで出力する事をおすすめします。

回答No.3

Locationヘッダは絶対URLです。 つまりhttp://から書かないとダメです。 (絶対URLとフルパスは異なります。フルパスは/docsvr/test/data.lzh) IEの動作は独自拡張によるものだと思います。 あと、Windowsのディレクトリ指定でも/です。 ネットワークパスというのは、マイネットワークのディレクトリですかね? file:///docsvr/test/data.lzh とするか、 ネットワークドライブに割り当てて、 file:///e:/test/data.lzh などとすればアクセスできるかもしれません。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

タイトルよく読んでませんでした ネットワークパスって書いてますね さっきの回答は無視してください

goku3
質問者

お礼

はい。ありがとうございます。 結局のところ、Location ヘッダには、 print "Location: http://~"; のような形式で書かないと、FireFoxでは正しく動いてくれないということになるでしょうか。 追加になりますが、よろしくお願いいたします。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

'\' はまずいでしょう \testが[TAB]estになっちゃいますよ(\nが改行のように\tはタブになる) URL区切りのつもりなら'/' にしましょう。 またLocationヘッダーはフルパスのURLで書くのが本来の仕様です print "Location: http://~/docsvr/test/data.lzh\n";

goku3
質問者

補足

ご回答ありがとうございました。 また、誤解のある表現ですみませんでした。 正確には、次のような感じになっています。 $url = "\\\\docsvr\\test\\data.lzh"; : print "Location: $url\n";

関連するQ&A

  • 同一バージョンのIEで、ヘッダーの解釈が異なり、ダウンロードが始まる

    同一バージョン(IE6.0 SP2)で、.htmlファイルを開こうとしたときに、PCによって、Webページがそのまま表示されずに、ダウンロードされて、ローカルなファイルとして、開かれるという現象が起きています。 FirefoxのLive HTTP Headers で、ヘッダー情報を見たところ、content-typeがapplication/octet-streamになっていて、やはりダウンロードされてしまいます。 content-typeが設定しないほうにも問題はありますが、ほとんどのPCのIEでは、自動的に判定しているようです。インターネットオプションをざっと見たのですが、対応するような項目もなく、困っています。 もし、これに関する設定など、ご教示いただければ幸いです。

  • Firefoxでページが見れない

    とあるページなんですが、IEだと見れるのに Firefoxで見ようとすると JavascriptをONにしても テキストファイルが開きます。URLは.cgiで終わっています。どんな原因が考えられますか?

  • location.hrefが動かない・・・

    F5が押された場合に指定したURLに飛ばすようにしたいのですがなかなかうまくいきません・・・ ブラウザはFirefox 2.0.0.7を使用しています コードは以下の様にしております <script type="text/javascript"><!-- function key(keyCode){ if (keyCode == 116){ location.href = "http://www.google.co.jp/"; } } --></script> <body onKeyDown="key(event.keyCode)"> </body> 指定URLはGoogleにしています これ状態でF5を押してもなにも起こらず普通に更新されるだけです location.href = "http://www.google.co.jp/";の部分をdocument.write('TEST');などのようにdocumet.writeに書き換えると普通に指定した文字列が表示させます location.hrefと同様にwindow.location.hrefやlocation.replaceでも指定URLに飛ばされません documet.writeは動くのでF5が押されたかどうか判断するコードは間違っていないと思うのですが・・・ ちなみにIEでもダメでした 誰か原因がわかる方が居られましたら教えてください よろしくお願いします

  • location href=""

    お世話になります 動作確認をしていてたのですが教えてください <script language="javascript"> <!-- function change(){ location.href="test1.html"; } /--> </script> <input type="button" value="送信" onclick="change()"> IE,Opera,Firefoxで試したのですが、Firefoxではページが切り替わりませんでした 何故でしょう?

  • Locationを使いたいのですが

    はじめて質問します。よろしくお願いします。 フォームからデータを受け取って、なんらかの処理をしてから、 locationで別のページへジャンプしたいのです。 下のソースで、ローカル(win95)では正常に動いたのですが、 サーバーに移すと送信後のtest.cgiがエラーになってしまいます。 text.txtへの書込みはちゃんと行われています。 原因がわからなくて困っています。 locationの使い方が間違っているのでしょうか? ↓↓ test.cgiソース ↓↓ ------------------------------------------------------------ #!/usr/bin/perl require 'jcode.pl'; &decode; if ($FORM{'cmd'} eq "regist") { &write; # ファイル書込み print "Location: index.html\n\n"; } else { print <<END; Content-type: text/html <HTML><HEAD><TITLE>タイトル</TITLE></HEAD> <FORM ACTION="test.cgi" METHOD="POST"> <INPUT TYPE=TEXT NAME="message" VALUE=""> <INPUT TYPE=SUBMIT NAME="submit" VALUE="送信"> <INPUT TYPE=HIDDEN NAME="cmd" VALUE="regist"> </FORM> </BODY></HTML> END } exit; # ファイル書込み sub write { open OUT, ">test.txt"; print OUT "$FORM{'message'}\n"; close OUT; }

    • ベストアンサー
    • Perl
  • lzhファイルがダウンロード出来ない

    http://cgi.din.or.jp/~hideyuki/cgi-bin/dl/perldnload.cgi 上のスクリプトをダウンロードしたいんですが 「ダウンロード」と書かれたプッシュボタンを押しても 空白のページしか出ないんです。 また、lzhファイルに直接アクセスすると、 (以下のURLをアドレス欄に打ち込んでアクセスすると) http://cgi.din.or.jp/~hideyuki/cgi-bin/dl/perlmail.lzh なんかQuickTimeのアイコンの右下が敗れた絵が出てくるんです。 どうやったらダウンロード出来るのでしょうか? このページの作者に問い合わせようと思っても メールアドレスが見つからなくてどうしようもありません。 Win95、IE5です。

  • エラーページでLocationしたい

    .htaccessにて ErrorDocument 403 /error.cgi とかしておいて error.cgiにて #!/usr/bin/perl print "Location:http://domain/\n\n"; みたいなことしたいんですが、IEではページの表示が認められてませんとなってしまいました。 一応内容を表示して Refresh:0;URL=..... としたら飛んでくれますが、LocationはエラーCGIでは使えないんでしょうか。 ----- Apache/1.3.26 Server perl, version 5.005_03 built for sun4-solaris Windows 2000 Pro SP1 Internet Explorer 5.5 SP2

    • 締切済み
    • CGI
  • Gecko エンジンでの Location ヘッダについて

    以前に投稿したのですが回答が得られなかったので削除して再質問です。 Gecko エンジンで Location ヘッダを送信してリダイレクトした後の ページで更新(ページリロード)すると反応がおかしいようです。 例えば a というページから b というページにリダイレクトをして b で更新をかけるとページの URL は a であると判断されてしまうよう です。 # 検証用 CGI (index.cgi) use strict; &main(); sub main { my $cgi = &getreq(); my $min = (localtime())[1]; # キャッシュしない print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; if($cgi->{'min'} eq '') { # $cgi->{'min'} が空なら # (Gecko では更新した時にもこっちにくる) print "Location: ./?min=$min\n\n"; exit; } elsif($cgi->{'min'} ne $min) { # 分が異なる場合 (Gecko はこない) print "Content-type: text/plain\n\n"; print "\$cgi->{'min'}=$cgi->{'min'}\n"; exit; } # $cgi->{'min'} と $min が同じ print "Content-type: text/plain\n\n"; print "min=$min\n"; exit; } sub getreq { my $cgi = {}; my $query = ''; $query = $ENV{'QUERY_STRING'}; my @args = split(/&/, $query); foreach my $i (@args) { my ($name, $val) = split(/=/, $i); $val =~ tr/+/ /; $val =~ s/%([0-9a-f]{2})/pack('C', hex($1))/eig; $name =~ tr/+/ /; $name =~ s/%([0-9a-f]{2})/pack('C', hex($1))/eig; $cgi->{$name} = $val; } delete($cgi->{''}); return $cgi; } CGI::Session でセッション管理をしようとしたところ、IE(Trident)と Opera(Presto)では正常なのですがFirefoxでうまく動作しなかったので よく調べてみたところこのような状態です。 どうにかならないでしょうか。 因みに、後で調べてみるとSafari(WebKit) for Winでも正常でした。 現象が発生するのはGeckoのみです。 (Fxの他、SeaMonkeyでも同様の現象を確認しています)

    • ベストアンサー
    • CGI
  • 自ファイルのHTTPヘッダーの取得

    他のURLであれば、get_headers関数を利用して、「HTTP/1.1 200 OK」等のヘッダー情報が取得できますが、自ファイルのヘッダー情報はどのように取得するのでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • HTTP 200 OKの後のリダイレクト?

    OS:Windows Vista Business IEやFirefoxであるフォーム(Host:xxx.example.com/test)にPOSTしました。 そのレスポンスのHttpヘッダに「HTTP/1.1 200 OK」とありました。 続いてブラウザは別のページの取得を行いました(Host:yyy.exmaple.com/other)。 私のつたない知識では、リダイレクトを行うのは、HTTPステータスコードが301~303などの場合だと思っていたのですが、 実際は上記のようにPOST後に200が返ってきたのに、別のURLへGETを投げていました。 (IE・Firefoxとも) POST後のHTTPヘッダを見たところ、ヘッダにはLocationはなく、「yyy.example.com/other」のURLの文字列も見当たりません。 ブラウザはどうやってPOST後のリダイレクトを検知し、さらに移動先のURLを知っているのでしょうか?