.net C#如何设置HttpClient Keep-Alive为false

r6hnlfcb  于 2023-04-13  发布在  .NET
关注(0)|答案(5)|浏览(376)

我在. NET上遇到了一个HTTP请求的低性能问题。在本地主机上向REST API发送HTTP GET请求需要大约500毫秒才能完成。我花了很多时间来修复它。我尝试了很多方法:HttpClientHttpWebRequestWebClientRestSharp。它们都不起作用。互联网上的大多数解决方案都说将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才能完成。

flvtvl50

flvtvl501#

使用以下代码在客户端上禁用HTTP Keep-Alive:

_http.DefaultRequestHeaders.ConnectionClose = true;

这将把Connection请求头设置为close

hgc7kmma

hgc7kmma2#

设置HttpWebRequest.KeepAlive = true时,头集为Connection:keep-alive
设置HttpWebRequest.KeepAlive = false时,头集为Connection:关闭
所以你需要

_http.DefaultRequestHeaders.Add("Connection", "close");
xriantvc

xriantvc3#

代码如下:

HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");
gwbalxhn

gwbalxhn4#

希望这个能帮到你,我已经测试过了

_client.DefaultRequestHeaders.Connection.Add("Keep-Alive");
xv8emn3q

xv8emn3q5#

我写了HttpClientHandler,在请求前的处理程序中,我删除了头“Connection”。在本例中,它设置了默认的“Connection:keep-alive”。即使在此之前,你把它放在HttpClient默认情况下,设置属性,等等。检查你的处理程序。

相关问题