2013-08-26 77 views
3

我試圖從瀏覽器發送的應用程序發送相同的信息。這裏是提琴手捕獲的數據的一部分:發送連接頭設置爲保持活動狀態

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

我被這個連接屬性卡住了。如果我設置的屬性保持活動爲true,提琴手我看到這一點:

代理連接:保持活動

如果我嘗試設置連接屬性設置爲保持活動,我得到這個錯誤:

Keep-Alive和Close可能未使用此屬性進行設置。

如何編寫代碼,以便在菲德勒我可以看到這一點:

連接:保持活躍

我全碼:

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(); 

回答

8

爲了讓您的應用程序發送Connection: Keep-Alive頭,請使用HttpWebRequest對象上的KeepAlive屬性。

當客戶端知道它位於代理(諸如Fiddler),它可以發送Proxy-Connection: Keep-Alive頭而不是一個Connection: Keep-Alive報頭。期望HTTP/1.1代理(如Fiddler)在將它傳遞給上游服務器之前將其從Proxy-Connection轉換爲Connection

這個「代理重命名標題」模式是在很多年前引入的,目的是嘗試解決HTTP/1.0服務器中不適當地支持Keep-Alive的問題。如果過時的代理沒有通過刪除Proxy-前綴來重命名標題,則服務器會忽略Proxy-Connection標頭。

+0

所以你在說什麼,即使我看到Fiddler的Proxy-Connection頭,上游服務器也會看到Connection頭? –

+0

通常是。例如嘗試訪問https://bayden.com/echo.aspx。 – EricLaw

+0

太棒了,謝謝! –

相關問題