我在.NET上遇到了HTTP请求的低性能问题,对本地主机上REST API的HTTP GET请求大约需要500毫秒才能完成。我花了很多时间来修复它。我尝试过很多方法:HttpClient、HttpWebRequest、WebClient和RestSharp。它们都不起作用。互联网上的大多数解决方案都说将Proxy参数设置为null,但它仍然不会更快地工作。
我发现减少这一时间的唯一方法是将request的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毫秒才能完成。
发布于 2016-07-29 07:19:43
设置HttpWebRequest.KeepAlive = true时,标头集为Connection: keep-alive
设置HttpWebRequest.KeepAlive = false时,头文件集为Connection: close
所以你需要
_http.DefaultRequestHeaders.Add("Connection", "close");发布于 2018-05-08 12:58:05
使用以下代码在客户端上禁用HTTP Keep-Alive:
_http.DefaultRequestHeaders.ConnectionClose = true;这会将Connection请求标头设置为close。
发布于 2016-04-01 21:57:18
请看下面的代码:
HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");https://stackoverflow.com/questions/36357943
复制相似问题