Close Window

Print Story

Poor Man's HTTP Compression with ColdFusion

There are a couple of things to note before we begin.

First, HTTP Compression is a great way to speed up your Website and lower bandwidth utilization all at the same time. In this example, your ColdFusion server (6.1 and above) will encode CFML output using GZIP and have the browser decompress this data on the fly. In a corporate environment, Webmasters may choose to go with third-party software such as Port80 Software's httpZip, which can compress other files as well, including .js, .css, and your HTML files. In this example, we are only compressing the generated HTML output from a .cfm template execution.

Doing a Google search will reveal many different Java servlet filters that can do the job for you for free. Many of them have issues with memory leaks, don't scale well, or have other issues related to them, so make sure you are picking one that has been well tested, and make sure to always test any server changes in a development environment before deploying to production. Another thing to note is that not all browsers support GZIP encoding, so make sure your user group is using Microsoft Internet Explorer 6+ and Firefox 1.0+.

As a side note, if you are using ColdFusion to consume data from another ColdFusion server that is using HTTP Compression, be sure to read Steven Erat's blog post on potential issues and workarounds at www.talkingtree.com/blog/index.cfm/2004/7/28/20040729. A couple of CFHTTPParam tags allow you to tell the server to send an uncompressed response. In this example, we will be using Coldbeans Software's Compress Filter, which is available at www.servletsuite.com/servlets/gzipflt.htm.

  • Step 1
    Shut down ColdFusion.

  • Step 2
    In cfroot\wwwroot\WEB-INF\lib, download the gzipflt.jar file.

    In cfroot\wwwroot\WEB-INF, edit the web.xml file and place the following XML markup near the end of the file just before the closing </web-app> element:

    <!-- start GZipFilter settings -->
    <filter>
    <filter-name>GzipFilter</filter-name>
    <filter-class>com.cj.gzipflt.GzipFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>GzipFilter</filter-name>
    <url-pattern>*.cfm</url-pattern>
    </filter-mapping>

  • Step 3
    Restart ColdFusion.

    That's it!

    The effects of the changes can be measured quite easily in Firefox using the Web Developers Extension version 1.1.3. This extension is available at http://chrispederick.com/work/webdeveloper/.

    Load the ColdFusion Administrator Login page. On the Web Developer Extension, if you click Information -> View Response Headers, you should see something similar to this:

    Server: Microsoft-IIS/6.0
    Content-Type: text/html; charset=UTF-8
    Content-Encoding: gzip
    Content-Length: 2261

    200 OK

    Note, Content-Encoding and Content-Length, both of which indicate that the GZIP filter is running successfully. Go back to the ColdFusion Administrator Login page and, on the Web Developer Extension, if you click Information -> View Document Size, you should see something similar to Figure 1.

    In the "Documents" line, note that it compressed the ColdFusion Administrator Login page to one-fourth its original size, giving you a total savings of 6 kb. This may not seem like a lot, but try the same thing after logging in. You should see something similar to Figure 2.

    This page shows a savings of almost 40 kb! Now that's huge. Bring up other Websites on this server and watch the savings add up!

    I'd like to thank Steven Erat for reviewing this article prior to publication.

  • © 2008 SYS-CON Media Inc.