在我的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
}
答案 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