我在.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
。我找不到如何将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毫秒才能完成。