あなたはすべてサーバー構成に依存しています。
応答ヘッダーを取得した場合はExpires
、指定された有効期限まで何も要求する必要がないことを意味します。応答ヘッダーを取得した場合は、それを使用してテストLast-Modified
できるはずです。If-Modified-Since
応答ヘッダーを取得した場合は、それを使用してテストETag
できるはずです。If-None-Match
例としてhttp://cdn3.sstatic.net/stackoverflow/img/favicon.icoを見てみましょう(Stackoverflow のファビコン画像):
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
System.out.println(connection.getHeaderFields());
これは与える:
{null=[HTTP/1.1 200 OK]、ETag=["9d9bd8b1165cb1:0"]、Date=[Wed, 17 Aug 2011 17:57:07 GMT]、Content-Length=[1150]、Last-Modified=[水、2010 年 10 月 6 日 02:53:46 GMT]、Content-Type=[image/x-icon]、Connection=[keep-alive]、Accept-Ranges=[bytes]、Server=[nginx/0.8.36] 、X-キャッシュ=[ヒット]、キャッシュ制御=[最大年齢=604800]}
If-Modified-Since
次に、と同じ値でaを実行しLast-Modified
ます。
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
connection.setRequestProperty("If-Modified-Since", "Wed, 06 Oct 2010 02:53:46 GMT");
System.out.println(connection.getHeaderFields());
これにより、予想どおり 304 が得られます。
{null=[HTTP/1.1 304 Not Modified], ETag=["9d9bd8b1165cb1:0"], Date=[Wed, 17 Aug 2011 17:57:42 GMT], Last-Modified=[Wed, 06 Oct 2010 02: 53:46 GMT]、Connection=[keep-alive]、Server=[nginx/0.8.36]、X-Cache=[HIT]、Cache-Control=[max-age=604800]}
If-None-Match
次に、と同じ値でaを実行しETag
ます。
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
connection.setRequestProperty("If-None-Match", "9d9bd8b1165cb1:0");
System.out.println(connection.getHeaderFields());
これにより、予想外に 200 が返されます。
{null=[HTTP/1.1 200 OK]、ETag=["9d9bd8b1165cb1:0"]、Date=[2011 年 8 月 17 日水曜日 18:01:42 GMT]、Content-Length=[1150]、Last-Modified=[水、2010 年 10 月 6 日 02:53:46 GMT]、Content-Type=[image/x-icon]、Connection=[keep-alive]、Accept-Ranges=[bytes]、Server=[nginx/0.8.36] 、X-キャッシュ=[ヒット]、キャッシュ制御=[最大年齢=604800]}
さらに驚くべきことに、両方のヘッダーにランダムなガベージ値が として設定されている場合ETag
でも、サーバーは 304 を返します。これは、http://cdn3.sstatic.netIf-None-Match
の背後にあるサーバーが を完全に無視していることを示しています。それは(プロキシ)構成の問題であるか、完全に意識して行われている可能性があります(明らかな理由ではありません)。