Transfer-encoding chunked hex markers appearing in output?

Maxim Dounin mdounin at mdounin.ru
Mon Mar 5 08:34:37 UTC 2012


Hello!

On Mon, Mar 05, 2012 at 11:22:52AM +0800, Henry wrote:

> I've written a very simple script which acts as a specific proxy for
> XML feeds, reading from a source URL and passing the content
> straight through. It's trivial and it's working fine when run as a
> standalone HTTP server (via node.js).
> 
> However when I put nginx in front of it I get what appear to be the
> chunk hex markers in the output - which obviously renders the XML
> invalid. Here is an example of the output, note the "f32" at line 1,
> and the repeated "1000" on lines 53 & 85, the "58a" on lines 125 &
> 137 and so on.
> 
> https://gist.github.com/1973377
> 
> Here is my (reduced) nginx conf:
> 
>   server {
>       listen 80;
>       server_name feeder;
>       location / {
>           proxy_pass http://127.0.0.1:8888;
>       }
>   }
> 
> I've confirmed that the chunks themselves don't contain the spurious
> data (by dumping them to a file and checking with dhex), and apart
> from the expected Server: change the HTTP headers are the same with
> and without nginx:
> 
>   HTTP/1.1 200
>   Server: nginx/1.0.12
>   Date: Mon, 05 Mar 2012 02:02:38 GMT
>   Content-Type: text/xml; charset=UTF-8
>   Connection: keep-alive
>   etag: rM1jGkNUA9AzVj2iMQN9KWwLgcQ
>   last-modified: Mon, 05 Mar 2012 02:07:53 GMT
>   expires: Mon, 05 Mar 2012 02:08:03 GMT
>   cache-control: private, max-age=0
>   x-content-type-options: nosniff
>   x-xss-protection: 1; mode=block
>   transfer-encoding: chunked
> 
> I'm at a loss how to proceed and I'm hoping someone on the list
> recognises the problem.

According to RFC2616, "A server MUST NOT send transfer-codings 
to an HTTP/1.0 client."  That is, correct solution is to fix your 
script - it must not return chunked data to nginx (as nginx uses 
HTTP/1.0 in requests to backends).

Alternatively, you may upgrade to 1.1.x which has support for 
HTTP/1.1 to backends and is able to recognize and remove chunked 
encoding in such situations.

Maxim Dounin



More information about the nginx mailing list