【发布时间】:2017-11-01 09:37:42
【问题描述】:
是否有机会发出 http 获取请求、读取标头而不获取正文以减少流量并提高速度? 我使用此代码:
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。如果有重定向(位置标头) - 我将获得结果 url。但我不需要身体。用 GET 方法(不是 HEAD 方法)得到响应来得到没有响应体的结果是真的吗?
【问题讨论】:
-
您应该了解
HEAD请求。响应正文(至少部分)已经在使用GET的路上。您可以忽略它,但它仍然会出现并且会消耗不必要的带宽。 -
@spender 也是一个好点,尽管读取标头然后断开连接可能会避免大多数正文(如果正文足够大)实际在线路上传输。这肯定是一个不好的做法和hacky。
-
@LB2 :断开连接也有隐藏的成本。它破坏了 HTTP 1.1 流水线,并且当您真的在搞砸事情时,在 TIME_WAIT 期间无法重用端口,这可能导致端口耗尽。
-
@spender - 同意。这正是我所说的不良做法的意思。放弃连接以避免流量是一个坏主意。这就是为什么发表评论以帮助防止其他人提出这个想法。