• ベストアンサー

Referrerはなぜ取得できるのですか?

現在、ネットワークの勉強中です。 Referrerという環境変数でユーザが直前にどこのHPにアクセスしていたかという情報が埋め込まれてるみたいなんですが、これは、ブラウザがこの情報を記憶していて、ユーザのブラウザからサーバは情報を取得しているのでしょうか? あと、Referrerという環境変数はなぜ必要なんでしょうか?

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

#3の回答に対するお礼への補足です。 >ちょっと気になったのですが、自作ブラウザがGETメソッドを使うときに、Host:とかUser-Agent:とかReferer:に何もいれなかった >りしたら、どうなるんでしょうか? User-Agentに関して、閲覧しようとしたWEBページによっては、エラーが返って来たり、正しく表示されないかも知れません。 もちろん、WEBページの製作者がUser-Agentを判定し「知らないブラウザはエラーにしよう」とか「IEだったらIE用ページ、NSNだったらNSN用ページを表示、それ以外はエラー」と言う仕掛けを組み込んでいた場合だけですが。 また、iモード用など携帯向けページでは、User-Agentに含まれている詳細な機種情報を見て「この機種にはこのサイズの画像を、この機種にはこのサイズの画像を、この機種では画像が出せないので画像無し」などの細工をしていたりします。 Refererに関して、IEの「お気に入り」から飛んだり、アドレス入力欄にURLを直打ちした場合、Refererが付かない事は良くあります。 #2の参考URLをコピーしてアドレス入力欄に打ち込むとRefererが(none)と表示され、付いていない事が判ります。 Hostに関しては、DNSによりドメインに別名が定義されていた場合の判定に使われたりします。 例えば、ドメイン名の変更があり、新旧どちらのドメインでもアクセス出来るように(old.*****.jpとnew.*****.jpが同じドメインを指す場合など)してある時、旧ドメインでアクセスした場合のみ「ドメインが変更されました」と表示される事が可能になります。

その他の回答 (3)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

#2の補足です。 >ブラウザが表示したいページをサーバーに要求する時に、ブラウザがサーバーに送っているのです。 この部分でブラウザが何をしているかと言うと、ブラウザはサーバーに対し、以下のような要求を行っています。 (この回答ページからhttp://taruo.net/e/に飛んだ場合。内容は一例であり、実際とは異なります) GET /e/ HTTP/1.0<改行> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)<改行> Referer: http://oshiete1.goo.ne.jp/kotaeru.php3?q=769702<改行> Host: taruo.net<改行> Accept: */*<改行> Accept-Language: ja<改行> Accept-Encoding: gzip, deflate<改行> Connection: Keep-Alive<改行> <改行> ←リクエストの終りを示す空行 このように、全ての情報は、ブラウザがページの内容を取得するリクエストを発行する時に、ブラウザからサーバーに送られます。

hourensou2003
質問者

お礼

ちょっと気になったのですが、自作ブラウザがGETメソッドを使うときに、Host:とかUser-Agent:とかReferer:に何もいれなかったりしたら、どうなるんでしょうか? IEなんかは、わざわざこんな情報までサーバに対して送信しているのか疑問です。

hourensou2003
質問者

補足

chie65536さん、strifeさん、早速のレスポンスありがとうございます。 パチッ☆-(^ー'*)bナルホド ネットワークの勉強しているのですが、こんなに詳細な回答はめちゃくちゃありがたいです。やる気がさらに出てきます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

まず、参考URLをクリックしてみて下さい。色々なアクセス情報が表示される筈です。 これらの情報は、サーバーが勝手に取得しているのではありません。 ブラウザが表示したいページをサーバーに要求する時に、ブラウザがサーバーに送っているのです。 HTTP_REFERRERもそうで、ページを要求する前にブラウザがサーバーに送っています。 HTTP_REFERRERの利用方法は、以下の物が考えられます。 ・トップページ以外は外部からの直リンクを許さないようにする。 ・CGIスクリプトの不正使用の判定。外部に設置されたページからCGIを呼び出していないかどうかを判定する。 ・1つ前のページに戻る為のリンクを貼る。 ・アクセス解析でリンク元を集計する。

参考URL:
http://taruo.net/e/
  • strife
  • ベストアンサー率53% (112/209)
回答No.1

ええそうです。 クライアントがサーバにいろいろな情報を送っています。そのうちのひとつがHTTP_REFERERです。 (http://www.cybersyndrome.net/evc.htmlを見てみてください。このうちのひとつに見つかるでしょう。) HTTP_REFERERは、直前のページというよりリンク元の情報です。これを応用すればどこのページからリンクされているのかなどを調べたり統計を取ったりすることができます。 ただし、必須ではないので、ブラウザによってはリファラを残さないものもあります。 アクセス解析のリンク元集計もこれを使っているものが多いと思います。 なお、クライアントが送るわけですから、リファラは簡単に偽装可能で、Proxomitronなどの偽装ツールも多くあります。(つまり、信用性が薄いということです。) 以下、参考になりそうなURLを羅列しますので、どうぞごらんになってください。(リンクされなくて不便ですが…。) 環境変数 HTTP_REFERER http://www.futomi.com/lecture/env_var/http_referer.html HTTP_REFERER の挙動を探る http://program.station.ez-net.jp/special/network/web/referer.asp HTTP_REFERER とは http://k-tai.impress.co.jp/cda/article/keyword/10406.html

参考URL:
http://www.futomi.com/lecture/env_var/http_referer.html

関連するQ&A

  • httpとhttps リファラーも暗号化されるの?

    ブラウザでサイトにアクセスする場合、 普通にhttpでwebサーバへアクセスするとUser-Agentやリファラーなどの情報が平文のまま送信されますが、httpsでアクセスした場合はUser-Agentやリファラーなどヘッダ情報もSSLで暗号化されてサーバへ送信するのでしょうか?それともヘッダは平文のまま? 我ながら呆れるのですが、検索しても見つけきれない。。 まだまだ検索できないほど理解が足りてませんです。 どなたかよろしくお願いします。

  • HTTP_REFERERが使えない

    PHP4.2.1(RedHAT 7.2上)です。 $HTTP_REFERERや$HTTP_USER_AGENT等の環境変数が取得できないのですが、php.iniファイルで設定が必要でしょうか? 環境変数の取得方法が変わったのでしょうか?

    • ベストアンサー
    • PHP
  • htmlにコードを貼り、リファラーを取得したい

    外部のhtmlページに以下のコードを貼り付け、リファラーとアクセスページを取得しようと思っているのですが、うまくいきません。 ▼ htmlページに貼り付けたコード(外部サーバ) <script type="text/javascript" src="http://example.com/script.php"></script> ▼ script.php の 中身(自サーバ) $access_url= 'http://' . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI]; $referer_url = $_SERVER["HTTP_REFERER"]; [現在の状態] $access_url の中身 = http://自サーバのドメイン/script.php $referer_url の中身 = http://コードを貼り付けたページ 色々と試行錯誤してこの形になったのですが、完全に行き詰ってしまいました。 方向性だけでも良いので、どなたかご教授いただけませんでしょうか。 よろしくお願いいたしますm( _ _ )m

    • ベストアンサー
    • PHP
  • headでファイル情報を取得する場合のRefererは?

    ($type, $length, $time, $expires, $server) = head "http://www.example.jp/test.txt"; このような形でhead情報を取得する場合にRefererは送信されていないのでしょうか? example.comからexample.jpのtxtファイルを読みに行く際に、example.jp側のhtaccessでRefererによるアクセス制限をかけるとexample.comをokにしていても蹴られてしまいます。 SetEnvIf Referer "^$" ref_okにすると読めるのでheadでの情報の取得の際にはRefererが送信されていないのではないかと考えています。 ただこれだとURL直接入力でtxtが表示できるのでセキュリティの意味はありません・・・ CGIプログラムが情報を取得する際(headでもconnectでも)先にRefererの送信ができれば可能な気がしますが、そんなことができるのかわかりません。 CGIでRefererの送信方法もしくは特定のURLのCGIからのみアクセスを許可するなどのアクセス制限方法などありませんか?

    • ベストアンサー
    • Perl
  • フレームページで HTTP_REFERER

    よろしくお願いいたします。 初心者ながらもHPを立ち上げ、Free配布のcgiもいくつか設置したのですが、 アクセス解析のcgiで、機能等に非常に満足のいくcgiが、参照元を取得するのに 「HTTP_REFERER」を使っていました。 私のHPは、フレームを使っておりまして、「HTTP_REFERER」では参照元が取得 出来ません。 どのようにすればよろしいのでしょうか?? ちなみに私の使っているサーバーは、HPとcgiが別サーバーとなっています。 解析するページからは『<img~~』で呼び出しています。

    • ベストアンサー
    • CGI
  • アクセス解析でのHTTP_REFERERについて

    アクセス解析のCGIを作ってみようとがんばっています。そこでお伺いしたいのですが、 $ln = "$ENV{'HTTP_REFERER'}"; と単純にやればリンク元が取れると思っていたのですが、なぜか何度やってみてもHTTP_REFERERだけがだめでした。他の環境変数は問題なくファイルに書き出せるのですが、何をやってもリンク元の部分だけが空白になってしまいます。本をいくら読んでみてもわからず、ほとほと困り果ててこちらに参りました。 REFERERだけは保存するのに何か特別な処理が必要なのですか?解説が面倒なようでしたら Yes(処理が必要)/No(そんなことない君のスクリプトがどこかおかしい) だけでも構わないので教えていただけると有り難いです。 Tripodの無料HPを使っています。

    • ベストアンサー
    • Perl
  • window.openでreferer情報を取得する方法

    アクセスログ解析で、サイト内の遷移分析をしたいのですが window.openで展開しているページでは、 referer情報がアクセスログに出力されず 遷移が追えません。 refererを取得する方法はありますでしょうか? 宜しくお願いします。

  • ドコモ携帯で$ENV{'HTTP_REFERER'}が表示されない。

    ドコモ用のプログラムを作成しています。 環境変数の$ENV{'HTTP_REFERER'}をドコモのブラウザから 表示させたかったのですが、表示できません。ほかの環境変数は 表示できるのですが、なぜか$ENV{'HTTP_REFERER'}だけが表示 できません。ほかのキャリアでは表示できるのですが、なぜでしょうか? どなたかご教授お願いいたします。

    • ベストアンサー
    • Perl
  • $_SERVER['HTTP_REFERER'] について

    $_SERVER['HTTP_REFERER'] について質問があります。 この変数は、移動元のページのアドレスが入ると思うのですが、 Flashエレメントのボタンなどで移動すると、何も入りません。 アクセス制限に利用したいと思っているのですが、 何も入らないととても困ります。 何か良い方法はないものでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • リファラーの取得方法

    いつもお世話になっております。 今回も大変困ってしまし、質問をさせていただきます。 JavaScriptを使用してリファラを取得したいと考えており、 ネットや本を調べ、以下のように記述し、「Test.html」という名前で保存しました。 <script type="text/javascript"> //クッキーへ書き込み function SetCookie() { //リファラの取得 urlstring = document.referrer; //表示 window.alert(urlstring);           //クッキーへ書き込み document.cookie = "URL=" + escape(urlstring) + "; " + "expires=Fri,31-Dec-2030 23:59:59; "; } //呼び出し SetCookie(); </script> 「Test.html」と同じドメイン(サーバ)にあるWebページを表示した後、「Test.html」を表示するとリファラを取得でき、alertで表示できました。 しかし、「Test.html」異なるドメイン(このWebページがおいてないサーバ)のページを表示した後に「Test.html」のWebページにアクセスしても、リファラが取得できず、alertで表示できませんでした。 サーバが違っても、リファラは取得できるようなのですが、 どうしてこんな事態になったのか、どうにもわかりません。 どこか違っているのでしょうか? どうか教えてください。