2017-05-31 18 views
0

トラフィックを減らして速度を向上させるために、http取得要求、ヘッダーの読み取り、本文の取得を行う機会はありますか? 私はこのコードを使用します。本文を取得せずにHTTP GETリクエストでヘッダーのみを取得する方法

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(u1); 
     request.AllowAutoRedirect = true; 
     request.Timeout = 30000; 
     request.Method = "GET"; 
     request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"; 
     request.KeepAlive = true; 
     HttpWebResponse response; 

     using (response = (HttpWebResponse)request.GetResponse()) 
     { 
      var res = response.ResponseUri.ToString(); 
     } 

だから私は、結果だけのURLが必要です。リダイレクト(Locationヘッダー)がある場合は、結果のURLを取得します。しかし、私は体を必要としません。レスポンスボディなしで結果を得るために、GETメソッド(HEADメソッドではない)で応答を得るのは本当ですか?

+2

「HEAD」リクエストについて知る必要があります。レスポンスボディは(少なくとも部分的に)すでにGETで途中にあります。それを無視することはできますが、それでもやはり不要な帯域幅が必要です。 – spender

+0

@spenderでも良い点ですが、ヘッダーを読んでから接続を落とすと、ワイヤが実際に転送される可能性があります。それは確かに悪い習慣とハッキーだろう。 – LB2

+0

@ LB2:接続をドロップするとコストも隠されています。 HTTP 1.1のパイプライン処理が中断され、本当に物事を荒らしているときは、TIME_WAITの期間中にポートを再利用することができず、ポートが枯渇する可能性があります。 – spender

答えて

2

ボディを返すリソースにGETを使用すると、ボディを取得することを意味します。 HEADは、サーバリソースがそれをサポートしていると仮定して、あなたが求めているものに対して正確に設計されています。

サーバがHEADをサポートしていない場合は、わずか数バイトを要求するためにRange headerと遊ぶ可能性がありますが、サポートするリソースにも依存し、ハックのようなものです。

2

あなたはレスポンスのヘッダーを取得するためのHttpRequest

response.Headers 

のヘッダープロパティを使用することができます。

+0

これは、OPがすでにやっているヘッダーを読んでみましょう。それは交通量を減らすために身体が移動するのを止めません。 – LB2

関連する問題