【问题标题】:Sending connection header set as keep-alive发送连接标头设置为保持活动状态
【发布时间】:2013-08-27 03:18:23
【问题描述】:

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

【问题讨论】:

    标签: c# fiddler keep-alive


    【解决方案1】:

    要让您的应用程序发送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- 前缀来重命名标头,服务器将忽略 Proxy-Connection 标头。

    【讨论】:

    • 那么你的意思是,即使我在 Fiddler 中看到了 Proxy-Connection 标头,上游服务器还是会看到 Connection 标头?
    • 如果 fiddler 没有重命名它,我们如何调试它?我的似乎间歇性地不为相同的应用程序和相同的请求重命名它。有时有效,有时无效
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2012-01-03
    • 2021-09-13
    • 2013-08-27
    • 2019-09-01
    • 2018-03-16
    • 2012-11-04
    相关资源
    最近更新 更多