接收一个HTTP POST请求
本文关键字:一个 HTTP POST 请求 | 更新日期: 2023-09-27 18:08:17
接收HTTP 1.1请求的规则是什么?我试着看了多种信息来源,但我从来没有得出一个结论性的结论。我特别感兴趣的是如何处理POST请求的主体。我目前正在创建自己的web服务,不使用PHP或ASP.net。我的网站目前处理Get请求和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交谈。
我偶然发现了这个问题,因为我也无法接收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'意思? .
细心的读者可能会注意到type="file"
输入缺少name
属性。因此,我使用的浏览器,即
- Mozilla Firefox 53.0
- Google Chrome 58.0.3029.96
, 静默在POST请求正文中包含文件数据失败。Content-Length字段反映了这一点。当然,接收端的netcat
不会解析该字段。因此,双方只是保持连接打开。
注:这个问题似乎适合我的发现。@mitchell-nursey的另一个问题Web浏览器不发送POST请求的主体,直到取消请求看起来像一个"部分填充的缓冲区后不读取断开连接"-错误。