我在.NET上的HTTP请求有一个低性能问题。对localhost上的REST API的HTTP GET请求大约需要500毫秒才能完成。我花了很多时间来解决它。我尝试了很多方法:HttpClient
,HttpWebRequest
,WebClient
和RestSharp
。他们都没有工作。互联网上的大多数解决方案都说要将Proxy
参数设置为null
,但它仍然无法更快地运行。
我发现减少这个时间的唯一方法是将请求的Keep-Alive参数设置为false:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
这很有效。时间减少到7-10毫秒。但现在由于某些原因,我需要使用HttpClient
而不是HttpWebRequest
。我无法找到如何将{-1}}的Keep-Alive设置为false。我发现的唯一一件事是如何通过将“连接”标题设置为“保持活跃”来将其设置为true。
我在HttpClient上使用此代码进行POST请求:
HttpClient
完成后仍需要500-600毫秒。
答案 0 :(得分:26)
当您设置HttpWebRequest.KeepAlive = true
时,标头集连接:保持活动
设置HttpWebRequest.KeepAlive = false
时,标题集为连接:关闭
所以你需要
_http.DefaultRequestHeaders.Add("Connection", "close");
答案 1 :(得分:10)
使用此代码禁用客户端上的HTTP Keep-Alive:
_http.DefaultRequestHeaders.ConnectionClose = true;
这会将Connection
请求标头设置为close
。
答案 2 :(得分:2)
见下面的代码:
HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");
答案 3 :(得分:0)
我已经测试过,希望对您有帮助
_client.DefaultRequestHeaders.Connection.Add("Keep-Alive");
答案 4 :(得分:0)
我写了HttpClientHandler,并在请求之前的处理程序中删除了标题“ Connection”。在这种情况下,它将设置默认的“连接:保持活动”。即使在此之前,您默认情况下也将其放入HttpClient中,设置属性等。请检查您的处理程序。