Я выполняю некоторые запросы API, используя fsockopen () в PHP. Для большинства API, которые работают правильно, но из http://geocoding.cloudmade.com/ Я получаю следующий (RAW) ответ:
HTTP/1.1 200 OK Server: nginx/0.6.35 cache-control: no-cache Content-Type: application/json; charset=utf-8 Date: Tue, 19 Feb 2013 11:08:05 GMT pragma: no-cache Transfer-Encoding: chunked Connection: close 2fb {"found": 1, "bounds": [[52.48732, 13.42553], ... 0
Моя проблема в том, что «2fb» в первой строке и «0» в последней строке тела ничего не говорит. Если я отправляю тот же запрос через Firefox, тело не содержит «2fb» или «0». Поэтому, я думаю, это имеет некоторый смысл. Но что?
Спасибо за подсказки!
Это chunked transfer-coding , также обозначаемое заголовком ответного Transfer-Encoding: chunked
:
Кодовое кодирование изменяет тело сообщения, чтобы передать его в виде серии кусков, каждый со своим собственным индикатором размера, за которым следует ДОПОЛНИТЕЛЬНЫЙ трейлер, содержащий поля заголовка объекта. Это позволяет передавать динамически созданный контент вместе с информацией, необходимой для получателя, чтобы убедиться, что он получил полное сообщение.
2fb
, за которым следует \r\n
, указывает размер следующего фрагмента (763 байта). Размер блока размером 0
указывает последний кусок.