繁体   English   中英

接收HTTP POST请求

[英]Receiving A HTTP POST Request

接收HTTP 1.1请求的规则是什么? 我尝试查看多种信息来源,但我永远无法得出结论性的结果。 我特别想弄清楚如何处理POST请求的主体。 我当前正在创建自己的不使用PHP或ASP.net的Web服务。 我的网站当前可以很好地处理Get Requests和POST标头,但从未从客户端/ Web浏览器接收正文数据,因此这就是为什么我想了解是否有任何特殊规则来接收POST正文。

希望你能帮忙

谢谢,米切尔

处理POST并没有任何特殊规则 ,除了发送方需要以您期望的格式将其提供给您。 具体来说,如果POST请求的格式不是在请求的“ ACCEPT”标头中提出的格式,那么您可能会被绊倒。 我不确定您的操作方式,但这是我遇到的最常见的问题。 示例ACCEPT是text / plain,text / json等。您可以在https://en.wikipedia.org/wiki/List_of_HTTP_header_fields上稍作阅读,它将遍历通用集。 不要忘记,如果您确实愿意,可以选择自己实现,这对API密钥之类的东西非常有用(尽管使用已建立的标准被认为是最佳实践)。

同样,您可能正在违反跨域请求限制。 CORS会限制客户端从其他域接收请求,通常是为了保护用户免受可能发生的非常严重的事情(TM)的侵害。

虽然,这是使用PHP和ASP.NET的好处,但HTTP请求所伴随的许多怪异是由语言(PHP)或框架(ASP.NET)为您处理的,我可以与ASP交流.NET是格式错误的请求的出色守护者。

我偶然发现了这个问题,因为我也无法接收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

接收并显示请求,如enctype ='multipart / form-data'是什么意思?

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

  • Mozilla Firefox 53.0
  • 谷歌浏览器58.0.3029.96

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

注意:这个问题似乎适合我的发现。 @ mitchell-nursey的另一个问题Web浏览器直到取消请求后才发送POST请求的主体,这看起来像是“断开后未读取的部分填充的缓冲区”错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM