У меня есть устаревшее приложение в CakePHP 2.x
У него есть метод в контроллере, который выводит JSON в такой структуре:
{"id":59,"name":"Association of Southeast Asian Nations (ASEAN)","n_grouptags":1}
Метод контроллера использовал $this->response->type('json');
для установки content-type
в ответе на application/json; charset=UTF-8
. Все хорошо.
Что я заметил, так это то, что если возвращаемые данные становятся больше определенной длины, content-type
устанавливается на text/html; charset=UTF-8
без каких-либо изменений в коде .
Я включил несколько скриншотов ниже, которые показывают это, включая тип ответа.
Небольшой объем данных (тип содержимого = application/json
- ожидается):


Дополнительные данные (тип содержимого = text/html
- неожиданный):


В обоих случаях я проверил, что JSON действителен, используя https://jsonlint.com/
Почему это? Зависит ли это от длины ответа относительно того, как браузер его обрабатывает, или это проблема CakePHP?
PHP, который отвечает за вывод, выглядит следующим образом - , но в него не было внесено никаких изменений между двумя различными выходами, указанными выше :
$this->autoRender = false; // No View (template) is associated with this
$out = []; // Reset
// $tags is some data from a model
foreach ($tags as $k => $v) {
$n_grouptags = 123; // Actual number comes from a Model
$out[] = ['id' => $k, 'name' => $v, 'n_grouptags' => $n_grouptags];
}
$this->response->type('json'); // We *want* a JSON response
echo json_encode($out, JSON_FORCE_OBJECT); // Encode $out (the output) as JSON
Кэширование в приложении отключено: Configure::write('Cache.disable', true);