发送连接标头设置为keep-alive

时间:2013-08-26 18:57:38

标签: c# fiddler keep-alive

我正在尝试从浏览器发送的应用程序中发送相同的信息。以下是Fiddler捕获的数据的一部分:

POST http://something/ HTTP/1.1
Host: something.com
Connection: keep-alive

我遇到了这个连接属性。如果我将属性keep-alive设置为true,那么在Fiddler中我会看到:

代理连接:保持活跃

如果我尝试将连接属性设置为Keep-alive,则会收到此错误:

使用此属性可能无法设置Keep-Alive和Close。

如何编写代码,以便在Fiddler中我可以看到:

连接:保持活力

我的完整代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myUrl ");
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.Accept = "*/*";
WebHeaderCollection headers = new WebHeaderCollection();
headers.Add("Accept-Encoding", "myEncoding");
headers.Add("Accept-Language", "myLang");
request.Headers = headers;
request.ContentType = "myContentType";
request.Referer = "myReferer";
request.UserAgent = "myUserAgent";
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "myData";
byte[] data = encoding.GetBytes(postData);
request.GetResponse().Close();

1 个答案:

答案 0 :(得分:11)

要让您的应用发送Connection: Keep-Alive标头,请使用HttpWebRequest对象上的KeepAlive属性。

当客户端知道它位于代理(如Fiddler)后面时,它可能发送Proxy-Connection: Keep-Alive标头而不是Connection: Keep-Alive标头。期望HTTP / 1.1代理(如Fiddler)将该标头从Proxy-Connection转换为Connection,然后再将其传递给上游服务器。

这种“代理重命名标头”模式是多年前推出的,目的是尝试在不支持Keep-Alive的HTTP / 1.0服务器中解决挂起问题;我们的想法是,如果过时的代理没有通过删除Proxy-Connection前缀重命名标头,服务器将忽略Proxy-标头。