using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; namespace HEADRequest { class Program { static void Main(string[] args) { var completeUrl = "http://www.eggheadcafe.com/FileUpload/1145921998_ObjectDumper.zip"; long head=0; long stm=0; string length = String.Empty; string length2 = String.Empty ; for (int i = 0; i < 10; i++) { Stopwatch sw = Stopwatch.StartNew(); var request = WebRequest.Create(completeUrl); request.Method = "HEAD"; var response = request.GetResponse(); length = response.Headers[HttpResponseHeader.ContentLength]; sw.Stop(); response.Close(); head += sw.ElapsedTicks; Stopwatch sw2 = Stopwatch.StartNew(); WebClient obj = new WebClient(); Stream s = obj.OpenRead(completeUrl); sw2.Stop(); stm += sw2.ElapsedTicks; length2 = obj.ResponseHeaders["Content-Length"].ToString(); s.Close(); obj.Dispose(); } Console.WriteLine("HEAD: " + head.ToString( ) + " :" + length); Console.WriteLine("STREAM: " + stm.ToString() + " : " + length2); // OUTPUT: // HEAD: 3403088 // STREAM: 2192986 // HEAD is 55 percent slower Console.ReadLine(); } } } The answer is, it's faster to open the stream, examine the header, and immediately close the stream, instead of issuing a HEAD request!