PHP/Apache: множественные вызовы header() не работают

PHP/Apache: множественные вызовы header() не работают

В моем PHP-файле есть этот код (не настоящий код, просто для демонстрационных целей):

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

Но заголовки ответа в конечном итоге оказываются text/htmlвместо application/json. Насколько я понимаю, последний вызов header()должен быть тем, что используется - тем более, headers_sent()что возвращает false и ob_get_status()также подтвердит, что буферизация вывода включена.

ВPHP-документацияхотя header()в журнале изменений для версии 5.1.2 говорится следующее:

Теперь эта функция предотвращает отправку более одного заголовка одновременно в качестве защиты от атак с внедрением заголовков.

Хотя я не совсем уверен, что это значит, поскольку с момента выхода PHP 5.1.2 такой проблемы не возникало.

И дажеВордпрессполагается на header()многократный вызов, например, в wp-admin/admin-ajax.php, где он вызывается в самом начале файла @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );, а затем позже, когда он определил, что действие должно вернуть данные JSON, он вызывается @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );в .wp_send_json()wp-includes/functions.php

Можно ли сделать изменение на сервере, чтобы PHP использовал последний заданный тип контента? Очевидно, что я не могу изменить файлы ядра Wordpress.

Я использую Debian 9.3, PHP 7.1.3, Apache 2.4.25.

Примечание сайта: Следствием этой проблемы является то, что медиатека не загружает изображения в режиме сетки, а индикатор активности просто продолжает вращаться.

!! ОБНОВЛЯТЬ !!

Теперь я узнал, что это происходит, потому что в моем .htaccessфайле есть следующее:

php_value output_handler mb_output_handler

Я забыл, зачем он у меня там, поэтому не уверен, что осмелюсь его удалить... Но почему он производит такой эффект?

Связанный контент