接收HTTP POST请求

时间:2016-09-22 21:13:20

标签: c# web-services http post

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

希望你能帮忙

谢谢, 米切尔

2 个答案:

答案 0 :(得分:1)

处理POST 没有任何特殊规则,但发件人需要以您期望的格式提供给您。具体来说,如果POST请求的格式没有放在请求的“ACCEPT”标题中,您可能会被绊倒。我不确定你是怎么做的,但那是我遇到的最常见的犯规。示例ACCEPTs是text / plain,text / json等。你可以在https://en.wikipedia.org/wiki/List_of_HTTP_header_fields稍微阅读一下这将会超越公共集。不要忘记,如果你真的想要,你可以选择实现自己的,这对于API密钥这样的东西很有用(尽管使用已建立的标准被认为是最佳实践)。

同样,您可能会遇到跨源请求限制。 CORS将限制客户端接收来自其他域的请求,通常是为了保护用户免受可能发生的非常糟糕的事情。

虽然这是使用PHP和ASP.NET的好处,但是HTTP语句的许多奇怪之处都是由语言(PHP)或框架(ASP.NET)为您处理的,我可以说到ASP.NET是格式错误请求的优秀守门人。

答案 1 :(得分: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
  • Google Chrome 58.0.3029.96

静默无法将文件数据包含在POST请求正文中。 Content-Length字段反映了这一点。但是,接收端的netcat当然不会解析该字段。结果,双方只是保持连接打开。

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