仍然需要为FCGI使用"状态:404未找到"?

F21*_*F21 5 php http-status-codes http-headers

通常,当从PHP发送http状态标头时,会发送HTTP标头,如下所示:

header("HTTP/1.0 404 Not Found");
Run Code Online (Sandbox Code Playgroud)

但是,PHP手册说,对于FCGI主机,需要发送一个"Status"标头,然后由FCGI模块转换为HTTP标头:

header("Status: 404 Not Found");
Run Code Online (Sandbox Code Playgroud)

我在Windows 7机器上使用mod_fcgi在PHP上运行apache 2.2并且使用刚才发送头文件header("HTTP/1.0 404 Not Found");似乎工作正常.

这最近发生了变化吗?我还需要Status为FCGI主机发送标头吗?任何人都可以为其他平台(solaris,linux)和其他网络服务器(nginx,lighttp)确认这一点吗?

Dan*_*ack 3

我不认为您需要使用“状态”样式标头,除非您启用了选项 cgi.rfc2616_headers。

\n\n

该选项的描述是http://php.net/manual/en/ini.core.php

\n\n
\n

"告诉 PHP 在发送 HTTP 响应代码时使用什么类型的标头。如果设置为 0,PHP 会发送一个 Status: Apache 和其他 Web 服务器支持的标头。当此选项设置为 1 时,PHP 将发送 \xc2\xbb RFC 2616 兼容标头。除非您知道自己在做什么,否则请将其设置为 0。”

\n
\n\n

基本上,您将 HTTP 样式标头发送到 PHP,然后 PHP 在必要时将它们转换为“状态”样式标头。多年来似乎存在各种错误,要么这些错误转换不正确,要么一次发送多个“状态”标头 - 然而所有这些错误现在似乎都已修复。所以我认为你只需设置 HTTP 样式标头并让 PHP 转换它们就可以了。

\n\n

另外,我刚刚测试并发送标头(“HTTP/1.0 404 Not Found”);使用 FastCGI 在我的开发环境中运行良好

\n