xmlrpc: no content-length in response

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I'm developing a client/server architecture based on the XML-RPC
implementation in php4. All works pretty well, except that in the
response from the server there is no "Content-Length" in the header.
Since the XML-RPC specification requires this header to be present in
the server response, some libraries (notably: libxmlrpc++) choke on
this. For clarity, here's a (simple) server (slightly altered from:
http://www.devshed.com/c/a/PHP/Using-XMLRPC-with-PHP/4 /):

--- xmlrpc-server.php ---

function checkVersion_func( $method_name, $params, $app_data ) {
  return 0.12;

xmlrpc_server_register_method($xmlrpc_server, "checkVersion",

 *      When an XML-RPC request is sent to this script, it
 *      can be found in the raw post data.
: "";

$request_xml = $HTTP_RAW_POST_DATA;

 *      The xmlrpc_server_call_method() sends a request to
 *      the server and returns the response XML. In this case,
 *      it sends the raw post data we got before. It requires
 *      3 arguments:
 *      The first is the handle of a server created with
 *      xmlrpc_server_create(), the second is a string containing
 *      an XML-RPC request, and the third is for application data.
 *      Whatever is passed into the third parameter of this function
 *      is passed as the third paramater of the PHP function that the
 *      request is asking for.
$response = xmlrpc_server_call_method($xmlrpc_server, $request_xml,

// Now we print the response for the client to read.
print $response;


--- end ---

Now, if we call 'checkVersion' with an RPC client, the output from
ngrep is this:

--- ngrep ---
T xxxxx:52266 -> xxxxx:80 [AP]
POST /~xxxxx/pb/xmlrpc-server.php HTTP/1.1.
User-Agent: XMLRPCCocoa.
Host: xxxxxx
Pragma: no-cache.
Accept: */*.
Content-Type: text/xml.
Content-Length: 110.
<?xml version="1.0"?>
T xxxxx:80 -> xxxxx:52266 [AP]
HTTP/1.1 200 OK.
Date: Tue, 14 Feb 2006 17:20:21 GMT.
Server: Apache/1.3.34 (Ubuntu) PHP/4.4.2-1.
X-Powered-By: PHP/4.4.2-1.
Transfer-Encoding: chunked.
Content-Type: text/html; charset=iso-8859-1.
a7 .
<?xml version="1.0" encoding="iso-8859-1"?>

--- end ---

As you can see, there is no "Content-Length" in the response. Am I
doing something wrong here, or could this be a bug in php? Btw. I tried
this on different servers, with the same results.

Server version info:
Platform: Linux (ubuntu)
Apache: 1.3.34
PHP: 4.4.2-1
XMLRPC: xmlrpc-epi v. 0.51

Thanks for any help,

Re: xmlrpc: no content-length in response

Quoted text here. Click to load it

use output buffering ob_start(). measure the length of the output,  
make the header, emit the buffered output.

Quoted text here. Click to load it

No. it's using chunks instead.

Quoted text here. Click to load it

"Transfer-Encoding: chunked." is a valid alternative to "Content-Length:..."  
if XMLRPC doesn't support it it's lying where it claims HTTP/1.1  


Site Timeline