レスポンスヘッダーのETagとリファラ差異の考察

レスポンスヘッダーのETagとリファラ差異の考察
■ 店頭より得で、予約しやすいオンラインショップ。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE

ETagとは

ETag(エンティティタグ)は、HTTPにおけるレスポンスヘッダの1つである。 これは、HTTPにおけるキャッシュの有効性確認の手段の1つであり、ETagを利用してクライアントから条件付きのリクエストを行うことができる。

Wikipediaより

簡単に言うと、WEBブラウザ上のコンポーネント(画像やスクリプト、スタイルシートなど)と、WEBサーバー上のオリジナルコンポーネントが同一かどうかを決定するための仕組みです。

実際に見てみましょう。

image14

これは弊社のWEBページをchromeのdeveloperツールを使って見ている様子です。
弊社ロゴのレスポンスヘッダーにETagという項目があります。

はじめてアクセスしたページの各コンポーネントに対しWEBサーバーはユニークなETagを発行します。

2回目以降にアクセスした場合、WEBブラウザはWEBサーバーに対して、If-None-Matchヘッダーと一緒に、以前送られてきたETagを送ります。

image13

WEBサーバー側では、以前発行したETagと一致していた場合、ステータス304だけを返し、WEBブラウザはWEBブラウザ側で保持しているキャッシュを使用します。

このように、キャッシュの有無をチェックして、キャッシュがあるならキャッシュを使おうよ。という、通信に優しい仕組みなわけです。

ETagをPHPで書き換える

ETagとはWEBサーバー側で発行されるユニークなIDですが、PHP等から任意の文字列を与えることもできます。

image17

任意の文字列を与える事ができるということは、これを利用してトラッk・・・げふんっげふんっ!!

不思議な現象

さて前置きが長くなりましたが、色々まさぐっていたらちょっと不思議な現象がおきたので共有します。

etag1.html

etag2.html

etag1.htmlとetag2.htmlを用意します。中身は全く一緒で、scriptタグでetag_.phpを読み込んでいます。(ファイル名に意味はまったくありません。)

etag_.php

etag_.phpの中身はこんな感じ。
If-None-Matchヘッダーがなければ”bitwave”というEtagとキャッシュコントロールヘッダーを発行します。

この状態でetag1.htmlにアクセスしてみます。

Google chrome etag1.html

image19

ちゃんと”bitwave”というETagが発行されています。
なぜRefererに赤枠をつけたのかは後述します。
続いて同じブラウザでetag2.htmlにアクセスしてみます。

Google chrome etag2.html

image12

etag1.htmlにアクセスした際、すでにetag.php?mode=hogeはキャッシュされましたので、今度はETagではなくIf-None-Matchがヘッダーにがリクエストヘッダーとしてあります。

では続いてsafariで見てみます。

safari etag1.html

image11

chromeのときと同じで、”bitwave”というETagが発行されています。
続いてetag2.htmlにアクセスします。

safari etag2.html

image10

これもchromeの場合と同じで、ETagではなくIf-None-Matchヘッダーがあります。

しかし、chromeの場合と異なる点があります。それがRefererの値です。

chrome

image12

safari

image10

chromeでは、そのときアクセスしたetag2.htmlがリファラになっているのに対して、safariでは、キャッシュした際のURLであるetag1.htmlがリファラとなっています。

例えばPHPでリファラを取得した場合も同様に、chromeとsafariでは結果が異なります。

ETagを発行しないようにすると、この現象は起こらず、どちらのリファラもetag2.htmlとなります。

リファラの定義を考えれば、chromeの動作が正しいように思いますが、もしリファラの値が想定と異なる場合は、ETagを疑ってみるのも良いかと思います。

■最新のiPhoneの購入・機種変更なら店頭より得で、予約しやすいオンラインショップ。
機種の頭金や使わないオプションパックをつけて年間何万円も損していませんか?
オンラインショップなら故障のサポートもしっかりしていて最低限の費用。待たされることもありません。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE
がお得です。