#php #ajax #perl
#php #ajax #perl
Вопрос:
Что это за странные символы в моем результате Ajax 138d в начале и 0 в конце моего результата ajax. как это отключить?
138d
{"feeds":[{"pubdate":"Sun, 28 Nov 2021 23:00:00 EST"]}
0
Ответ №1:
Ваш HTTP-клиент глючит. Он неправильно извлек тело из HTTP-ответа.
Существует три способа сигнализации окончания HTTP-ответа:
- Использование
Content-Length
заголовка. - Используя
chunked
кодирование переноса. - Закрытие сокета.
Первые два метода позволяют осуществлять более одного обмена запросами-ответами через одно и то же соединение, что намного эффективнее, чем создание нового соединения для каждого запроса. (Особенно для HTTPS.)
Content-Length
Заголовок довольно прост в использовании, но для его отправки требуется знать размер тела сообщения. Кодирование chunked
передачи не имеет такого ограничения. Это позволяет серверам начать отправку ответа до того, как его размер станет известен.
HTTP-ответ, который использует фрагментированное кодирование передачи, может выглядеть следующим образом:
HTTP/1.1 200 OK␍␊
Transfer-Encoding: chunked␍␊
Content-Type: application/json␍␊
␍␊
28␍␊
..............................␍␊
28␍␊
..............................␊␍␊
0␍␊
Тело сообщения этого ответа
............................................................␊
Ответ, который вернул ваш JSON, по-видимому, использовал chunked
кодирование переноса. И все, что вы использовали для анализа HTTP-ответа, неправильно вернуло все еще фрагментированное тело сообщения. Это ошибка. Цитата RFC2616,
Все приложения HTTP / 1.1 ДОЛЖНЫ иметь возможность получать и декодировать «фрагментированное» кодирование передачи
Комментарии:
1. Большое спасибо ikegami. Я попытался отключить gzip на моем сервере apache, тогда он исправлен. спасибо за помощь.