(部分)C#HTTP Server无法识别HTTP请求

时间:2014-10-31 16:46:15

标签: c# http-post httprequest httplistener grapevine

在我的visual studio 13控制台应用程序中,我在TCP-Socket上接收以下字节流(从嵌入式设备接收):

POST /setup HTTP/1.1
Content-Length: 6
Content-Type: application/setup+tlv8

TLV8-data

虽然它似乎是一个有效的http请求,但我的以下尝试都没有成功将其识别为http请求:(在常规HTTP请求上它们完美地工作)

到目前为止,我实际上只对来自POST或GET的所请求路径以及来自正文的附加内容(tlv格式化)感兴趣。< / p>

配置错误了吗?如:我需要告诉正确的内容类型? 有没有办法摆脱编写自己的简单文本解析器?

葡萄藤的代码示例:

private void init()
    {
        s = new PairServer();
        s.Host = "172.28.22.78"; 
        s.Port = "52025"; 
        s.Start();
   }

提供以下服务器类:

public class PairServer : RestServer
    {
        [RestRoute(Method = HttpMethod.POST, PathInfo = @"^/setup")]
        [RestRoute(Method = HttpMethod.GET, PathInfo = @"^/setup")]
        public void PairSetup(HttpListenerContext context)
        {
            // will not reach here
        }

        [RestRoute(Method = HttpMethod.POST)]
        public void AnyRoute(HttpListenerContext context)
        {
           // Not even here
        }

1 个答案:

答案 0 :(得分:1)

  

虽然它似乎是一个有效的http请求

不,这不是有效的HTTP请求。作为specification状态的有效HTTP请求必须包含Host请求标头:

  

客户端必须在所有HTTP / 1.1请求中包含Host头字段   消息。如果请求的URI不包含Internet主机名   对于所请求的服务,那么Host头字段必须是   给出一个空值。 HTTP / 1.1代理必须确保任何   请求消息它转发确实包含一个适当的主机头   标识代理请求的服务的字段。所有   基于Internet的HTTP / 1.1服务器必须以400(错误请求)响应   任何缺少Host头的HTTP / 1.1请求消息的状态代码   字段。

因此,请确保您的客户遵守规范:

POST /setup HTTP/1.1
Host: example.com
Content-Length: 6
Content-Type: application/setup+tlv8

TLV8-data