2016-09-22 168 views
0

接收HTTP 1.1请求的规则是什么?我尝试着寻找多种信息来源,但我永远无法得出确凿的结果。特别是我有兴趣弄清楚如何处理POST请求的主体。我目前正在创建我自己的Web服务,它不使用PHP或ASP.net。我的网站当前处理Get Requests和POST header但从来没有从客户端/ Web浏览器接收正文数据,这就是为什么我想知道是否有任何接收POST正文的特殊规则。接收HTTP POST请求

希望你能帮助

感谢, 米切尔

+0

'我目前正在创建我自己的Web服务,它不使用PHP或ASP。净'它是什么使用:) –

+0

目前使用C#和使用TCP侦听器和流。它为一个学校项目和我的资源是有限的... –

+0

为什么你不使用[HttpListener](https://msdn.microsoft.com/en-us/library/system.net.httplistener(v = vs.110 ).aspx),对于ex? –

回答

1

有没有用于处理POST,除了发送者需要把它送给你,你是一个格式的任何特殊规则期待。具体而言,如果POST请求的格式未包含在请求的“ACCEPT”头中,您可能会被绊倒。我不确定你是怎么做到的,但这是我遇到的最常见的犯规。示例ACCEPT是文本/纯文本,文本/ json等。您可以在https://en.wikipedia.org/wiki/List_of_HTTP_header_fields上稍微阅读这些内容,这些内容将覆盖常见集合。不要忘记,如果你真的想要,你可以选择实现你自己的API,这对于API密钥等很好(尽管使用已建立的标准被认为是最佳实践)。

同样,您可能会遇到交叉源请求限制。 CORS将限制客户接收来自其他域的请求,通常是为了保护用户免受可能发生的非常不好的事情(TM)的侵害。

尽管这是使用PHP和ASP.NET的好处,但很多与HTTP请求一起发生的奇怪事件都是由语言(PHP)或框架(ASP.NET)为您处理的,而我可以说ASP.NET是一个格格不入请求的优秀守门员。

+0

谢谢!我正在使用C#网络流来接收标题和正文。在我接受答案之前要等一下,但是这个答案是:P –

1

我偶然发现了这个问题,因为我也无法收到HTML POST正文。就我而言,我想从这样的形式接收文件:

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"> 
    <input type="file" /> 
    <input type="submit" value="OK" /> 
</form> 

出于调试目的,我开始

nc -l localhost 8000 

接收,并且在What does enctype='multipart/form-data' mean?描述显示的要求。

敏锐的读者可能注意到type="file"输入缺少name属性。其结果是,我使用的浏览器,即

  • 的Mozilla Firefox 53.0
  • 谷歌浏览器58.0.3029.96

默默没有包括在POST请求主体的文件数据。内容长度字段反映了这一点。但接收端的netcat当然不会解析字段。因此,双方只需保持连接畅通。

注意:这个问题似乎适合我的发现。 @ mitchell-nursey的其他问题Web Browser not sending Body of POST request until cancel of request看起来像“部分填充的缓冲区在断开连接后不能读取” - 错误。