GETメソッドの前にHEADメソッドを使うことで、画像や動画のような大きなデータのやりとりを抑制できます。
まえがき
URLからデータをダウンロードするとき、サーバーの負荷等を考えてデータが新しい場合だけダウンロードしたいことがあります。HTTPプロトコルではHEADメソッドのリクエストに対するレスポンスヘッダーが日付やETagといった情報を持ち、これらを利用して前述の目的を達成できます。
これらの情報はGETメソッドのリクエストに対するレスポンスヘッダーにも含まれますが、GETメソッドはデータそのものを取得するのでサーバーの負荷等は軽減できません。
C#における実装
C#ではSystem.Net.Http名前空間のHttpClientクラスを使用してURLにHEADメソッドのリクエストを送信できます。以下にサンプルコードを示します。
usingSystem;usingSystem.Net.Http;namespaceConsoleApp1{classProgram{// HttpClientのインスタンスは再利用すべきです。// https://docs.microsoft.com/ja-jp/dotnet/api/system.net.http.httpclient?view=netcore-3.1#remarksprivatestaticreadonlyHttpClienthttpClient=newHttpClient();staticvoidMain(){// HTTPリクエストを送信するURL// ここではQiitaのURLをお借りしています。varurl="https://qiita.com/";// URLに対するHTTP HEADリクエストメッセージを作成して送信// ここではResultを呼び出して同期処理にしています。varheadMessage=newHttpRequestMessage(HttpMethod.Head,url);varresponse=httpClient.SendAsync(headMessage).Result;// ETagを出力する// nullの可能性があります。varheaders=response.Headers;Console.WriteLine($"ETag:{headers.ETag?.Tag}");}}}参考
HTTPヘッダーやETagについてはMDNを参照ください。