On Mon, Mar 23, 2009 at 7:48 PM, Jérôme Etévé <jerome.et...@gmail.com>wrote:

> Hi Vincent,
>
> Why can it be wrong to serve binary content ? How do you do for
> instance when you want to dynamically generate an image or any kind of
> binary document based on the user's data ?
>
> Cheers !
>
> J
>

I wouldn't say it is "wrong" necessarily, only that it is often not the best
solution. Some disadvantages:

* performance: Apache will serve binary content from the file system with
better response times
* memory: serving with a mod_perl process could use 10-100MB more RAM than
Apache optimized for static files (and since binaries are often larger than
text files, the process will be held longer)
* pain: one slip in the code can cause your binary to be corrupted, and this
can be hard to debug.

I find it is often more efficient to pre-generate binaries using an offline
script. That said, I have used Mason to serve binaries, specifically CAPTCHA
images which need to be both randomly generated and associated with a
particular form submission for checking. It's not always wrong! :)

Some rules to follow in components that serve binary data:

* Always use the inherit => undef flag. Any text sent from any component in
the chain will corrupt your binary, and this is the only way to ensure that
never happens.
* Always explicitly set the content-type header in the component (before you
flush any buffers!).
* Name the component with an extension appropriate to the content-type. If
it generates pdf files, name it something.pdf, and modify your apache
configuration specially for that file. (This one may be considered
controversial, but I find it saves lots of pain at the client side, and I
strongly recommend it.)

Does anyone else have some handy tips? I would like to hear how others are
doing this too.

-- 
-Vince Veselosky
http://www.webquills.net
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to