我在. NET上遇到了一个HTTP请求的低性能问题。在本地主机上向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
。我找不到如何将HttpClient
的Keep-Alive设置为false。我唯一找到的是如何通过将“connection”头设置为“Keep-Alive”来将其设置为true。
我正在使用此代码通过HttpClient进行POST请求:
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload")
);
HttpResponseMessage response = await _http.PostAsync(uri, content);
而且它仍然需要大约500-600 ms才能完成。
5条答案
按热度按时间flvtvl501#
使用以下代码在客户端上禁用HTTP Keep-Alive:
这将把
Connection
请求头设置为close
。hgc7kmma2#
设置
HttpWebRequest.KeepAlive = true
时,头集为Connection:keep-alive设置
HttpWebRequest.KeepAlive = false
时,头集为Connection:关闭所以你需要
xriantvc3#
代码如下:
gwbalxhn4#
希望这个能帮到你,我已经测试过了
xv8emn3q5#
我写了HttpClientHandler,在请求前的处理程序中,我删除了头“Connection”。在本例中,它设置了默认的“Connection:keep-alive”。即使在此之前,你把它放在HttpClient默认情况下,设置属性,等等。检查你的处理程序。