【问题标题】:Reading "chunked" POST data in PHP在 PHP 中读取“分块”的 POST 数据
【发布时间】:2012-04-16 23:51:07
【问题描述】:

我正在尝试从带有“Transfer-Encoding: chunked”的请求中读取 POST 数据,但在收到所有数据后才能触发脚本,是否可以让 PHP 能够在分块请求通过时对其做出反应?

在 Apache 中使用 PHP 5.3.8。

【问题讨论】:

  • 这是 Apache 的函数,不是 PHP 的。简短的回答是“不”。不管你在做什么,你可能会在Node.js这样的事情上取得更大的成功
  • @DaveRandom:请将其发布为答案。所以你是说Apache在转发到PHP之前一直保留请求直到它完成?我能得到长答案吗?

标签: php transfer-encoding


【解决方案1】:

当前的 Apache API 不提供在完全接收到请求之前调用响应处理程序的能力。在handler phase 之前,任何模块(mod_phpmod_cgi 等)都不可能开始处理和响应请求,并且 Apache 核心直到完全接收到请求后才到达此阶段,并且初步处理/解析检查已完成。

将分块流作为请求发送是不常见的,通常这样的事情是响应。 HTTP 是一种主要为一对多内容交付而设计的协议——HTTP 服务器期望将内容提供给许多客户端,而不是让许多客户端向其提供内容。通常要实现这一点,您将在服务器上调用一个脚本,该脚本将连接到远程流(作为请求者)。

你到底想做什么?你想传递什么内容?您可以控制连接的两端吗?

【讨论】:

  • 很好的信息,谢谢。我正在尝试加快将录制的音频从手机传输到我控制的语音识别 API。我想让语音识别端在麦克风传送数据后立即开始接收和处理数据,而不是等待完整的录音完成。有什么建议吗?
  • 与其坚持单个 HTTP 请求,也许您可​​以将流拆分为单独的请求?例如,您可以在手机上缓存几 KB 的音频数据,然后将其发送到服务器,例如包含呼叫的唯一 ID 的 cookie 值。然后服务器可以使用这个 id 将消息分块处理,并在服务器端重新组合在一起。这种方法还具有潜在地能够在服务器上一次处理多个块的优点。但它会更复杂 - 即跟踪多个并发流。
猜你喜欢
  • 1970-01-01
  • 2017-05-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多