我正在尝试从浏览器发送的应用程序中发送相同的信息。以下是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();
答案 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-
标头。