- ベストアンサー
Referrerはなぜ取得できるのですか?
現在、ネットワークの勉強中です。 Referrerという環境変数でユーザが直前にどこのHPにアクセスしていたかという情報が埋め込まれてるみたいなんですが、これは、ブラウザがこの情報を記憶していて、ユーザのブラウザからサーバは情報を取得しているのでしょうか? あと、Referrerという環境変数はなぜ必要なんでしょうか?
- みんなの回答 (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)
#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<改行> <改行> ←リクエストの終りを示す空行 このように、全ての情報は、ブラウザがページの内容を取得するリクエストを発行する時に、ブラウザからサーバーに送られます。
- chie65536
- ベストアンサー率41% (2512/6032)
まず、参考URLをクリックしてみて下さい。色々なアクセス情報が表示される筈です。 これらの情報は、サーバーが勝手に取得しているのではありません。 ブラウザが表示したいページをサーバーに要求する時に、ブラウザがサーバーに送っているのです。 HTTP_REFERRERもそうで、ページを要求する前にブラウザがサーバーに送っています。 HTTP_REFERRERの利用方法は、以下の物が考えられます。 ・トップページ以外は外部からの直リンクを許さないようにする。 ・CGIスクリプトの不正使用の判定。外部に設置されたページからCGIを呼び出していないかどうかを判定する。 ・1つ前のページに戻る為のリンクを貼る。 ・アクセス解析でリンク元を集計する。
- 参考URL:
- http://taruo.net/e/
- strife
- ベストアンサー率53% (112/209)
ええそうです。 クライアントがサーバにいろいろな情報を送っています。そのうちのひとつが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
お礼
ちょっと気になったのですが、自作ブラウザがGETメソッドを使うときに、Host:とかUser-Agent:とかReferer:に何もいれなかったりしたら、どうなるんでしょうか? IEなんかは、わざわざこんな情報までサーバに対して送信しているのか疑問です。
補足
chie65536さん、strifeさん、早速のレスポンスありがとうございます。 パチッ☆-(^ー'*)bナルホド ネットワークの勉強しているのですが、こんなに詳細な回答はめちゃくちゃありがたいです。やる気がさらに出てきます。