Gzip pipeline

Overview

In this wiki there are other alternatives for generating gzip compressed output, a feature of HTTP 1.1. The advantage of this implementation is that it doesn't require any specific serializer or reader implementation. Unlike implementations that use servlet filters, gzip compression can be controlled from the sitemap, and content-length calculation is determined by serializers and readers.

Usage

First declare the new components in the sitemap:

<map:actions>
	<map:action name="gzip" logger="pipe.gzip" src="fcc.ima.cocoon.GzipAction"/>
</map:actions>
<map:pipes default="gzip-no-cache">
	<map:pipe name="gzip-no-cache" src="fcc.ima.cocoon.GzipNonCachingProcessingPipeline" 
				logger="pipe.gzip"/>
</map:pipes>

Create a pipe that is gzip aware:

<map:pipelines>
	<map:pipeline type="gzip-no-cache">
		<map:match src="my-url">
			<map:act type='gzip'/>
			<map:read src='my-file'/>
		</map:match>
	</map:pipeline>
</map:pipelines>

In order to activate gzip compression use:

<map:act type='gzip'/>

and for deactivating it:

<map:act type='gzip'>
	<map:parameter name='use' value='0'/>
</map:act>

You can (de)activate compression as many times as needed in a pipeline.

Source code

See attachments.

Notes

  • Mozilla 1.5 seems not to like compressed files.
  • jpg and gif files are already compressed, so compress them twice isn't very useful.

To do

  • Make a caching implementation

See also

Comments and improvements are welcome!.

My email address is dperezcar at fcc dot es (rename at and dot).

Attachment: GzipNonCachingProcessingPipeline.java

Attachment: GzipAction.java

  • No labels