在内部 API 请求之后、响应客户端之前,PHP 中的 header() 是否被“遗忘”了?

问题描述 投票:0回答:1

也许是一个愚蠢的问题,但我不知道 PHP 在这个意义上是如何工作的。

假设您从 JavaScript 客户端向 PHP 后端发出 HTTP 请求。在 PHP 的服务器端,您可以执行以下操作:

// validate input
// process input
header(...);
// execute internal API request, from this server in PHP, using guzzle, 
// curl or whatever, to an external API, and wait for the response
...
echo $response;

换句话说,在执行内部 API 请求之前调用

header()
时,HTTP 标头是否发送到外部 API,并在最终响应中丢失/未转发到 JavaScript 客户端?

php http-headers
1个回答
1
投票

这取决于 PHP 和 Web 服务器的配置方式,特别是关于输出/响应缓冲。

严格针对 PHP:

  • 如果启用
    output_buffering
    ,则整个请求必须在 any 响应(包括 HTTP 标头)返回到客户端之前完成。
  • 如果未启用
    output_buffering
    ,则在生成非标头输出后立即发出 HTTP 标头。之后尝试设置另一个标头会导致经典的“标头已发送”错误。

当然,需要注意的是,可以使用 userland code 启用/禁用/刷新/清除缓冲,这进一步使问题变得混乱。

之后,由 HTTP 服务器决定要做什么,但通常默认情况是立即转发标头并在一定程度上缓冲输出,以免发送许多小数据包,而很少有较大的数据包就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.