为什么我的httpresponsemessage的内容标题未添加到正确的字段?

时间:2015-11-13 20:18:31

标签: c# http-headers httpclient

我尝试使用HttpClient来获取数据流,但HttpResponseMessage我回来时发生了奇怪的事情。

我发送请求的方式如下:

_webClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, _webClient.BaseAddress + connectionSuffix), HttpCompletionOption.ResponseHeadersRead);

然而,响应的 ContentHeaders 并没有像我期望的那样填充。以下是一个示例:响应包含内容类型标题,但它的值不能在 ContentType 字段中找到,仅在通用的 Headers 中可枚举。 visualstudio

分析Wireshark中的数据包流程给出了以下内容:

  

GET /video.cgi HTTP / 1.1   授权:基本YWRtaW46   主持人:192.168.0.150   连接:Keep-Alive

回答:

  

HTTP / 1.0 200 OK   服务器:Camera Web Server / 1.0   Auther:Steven Wu   MIME版本:1.0   缓存控制:无缓存   Content-Type:multipart / x-mixed-replace; boundary = - video boundary -

这不是世界末日,我在边界参数之后,我可以在通用标题字段中找到它。但我不禁要问:这是预期的行为吗?我似乎无法找到有关获取标头的任何信息,只是关于如何将它们添加到请求中(这是另一回事)

1 个答案:

答案 0 :(得分:1)

由于边界参数值中的空格,解析此标头失败。

这不符合RFC2616,因为RFC在Section 2中声明标头参数值不能包含空格,或者它们应指定为qouted字符串。

将边界更改为

boundary=--videoboundary--

boundary="--video boundary--"

它有效。

注意:您应该在读取后者的值时删除qoutes。

来自RFC,第2节:( LWS =线性空格)

Many HTTP/1.1 header field values consist of words separated by LWS or 
special characters. These special characters MUST be in a quoted string
to be used within a parameter value (as defined in section 3.6).