当以FPM运行时,我似乎无法立即从PHP发送标头。它们仅在请求结束时与内容一起发送。
我有一个Apache + PHP-FPM设置。我已禁用PHP和Apache中的输出压缩。
我什至使用tcpdump -nn -i any -A -s 0 port 9000
考察了TCP连接流,并且我发现PHP直到最后才将标头发送给Apache,所以问题出在PHP设置上。
请参见下面我正在使用的测试代码。
header('Status: 200 OK');
header('Content-type: text/html; charset=utf-8');
header('Link: </src/app/src/App/Ui/Layout/default.css?__mtime=1553684041>; rel=preload; as=style;', false);
flush();
header('Test: 1', false);
sleep(5);
header('Test2: 2', false);
echo 'test';
我希望Link:
标头在请求结束之前发送,即在'test'
字符串之前发送,但不是。在5
秒延迟之后,所有标头均在请求的末尾发送。
我在做什么错?
默认情况下,fastcgi_buffering
设置为on
。
您需要在相关的fastcgi_buffering off;
块中添加:location
。