Question

I'm trying to send the same information from my application as I send from the browser. Here is part of data captured by Fiddler:

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

I got stuck with this connection property. If I set the property keep-alive to true, in Fiddler I see this:

Proxy-Connection: Keep-Alive

If I try to set the connection property to Keep-alive, I get this error:

Keep-Alive and Close may not be set using this property.

How to write the code so that in Fiddler I can see this:

Connection: keep-alive

My full code:

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();
Was it helpful?

Solution

To have your application send a Connection: Keep-Alive header, use the KeepAlive property on the HttpWebRequest object.

When a client knows that it is behind a proxy (like Fiddler), it may send a Proxy-Connection: Keep-Alive header instead of a Connection: Keep-Alive header. The expectation is that a HTTP/1.1 proxy (like Fiddler) will convert that header from Proxy-Connection to Connection before passing it to the upstream server.

This "proxy renames header" pattern was introduced many years ago to attempt to workaround hangs in HTTP/1.0 servers that didn't support Keep-Alive properly; the idea is that the server would ignore the Proxy-Connection header if the outdated proxy didn't rename the header by removing the Proxy- prefix.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top