PHP/Apache: múltiplas chamadas para header() não funcionam

PHP/Apache: múltiplas chamadas para header() não funcionam

No meu arquivo PHP eu tenho este código (não o código real, apenas para fins de demonstração):

ob_start();
var_export(headers_sent());
var_export(ob_get_status());
header('Content-Type: text/html');
header('Content-Type: application/json');

Mas os cabeçalhos de resposta acabam sendo text/htmlem vez de application/json. Pelo que entendi, a última chamada header()deve ser o que é usado - espacialmente, pois headers_sent()retorna falso e ob_get_status()também confirmará que o buffer de saída está ativado.

EmDocumentação PHPpois header()diz esta declaração no changelog da versão 5.1.2:

Esta função agora evita que mais de um cabeçalho seja enviado ao mesmo tempo como proteção contra ataques de injeção de cabeçalho.

Não tenho certeza do que isso significa - porque isso certamente não tem sido um problema desde o PHP 5.1.2.

E até mesmoWordPressdepende de ligar header()várias vezes, por exemplo. em wp-admin/admin-ajax.phponde ele chama no início do arquivo @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );e, mais tarde, quando determina que a ação precisa retornar dados JSON, ele chama @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );em .wp_send_json()wp-includes/functions.php

Existe alguma mudança que eu possa fazer no servidor para fazer o PHP usar o último tipo de conteúdo fornecido? Obviamente não posso alterar os arquivos principais do Wordpress.

Eu uso Debian 9.3, PHP 7.1.3, Apache 2.4.25.

Nota do site: O efeito desse problema é que a Biblioteca de Mídia não carrega nenhuma imagem no modo de grade e o indicador de atividade continua girando.

!! ATUALIZAR !!

Agora descobri que isso acontece porque tenho o seguinte em meu .htaccessarquivo:

php_value output_handler mb_output_handler

Esqueci por que tenho isso aí, então não tenho certeza se ouso removê-lo... Mas por que isso tem esse efeito?

informação relacionada