You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by André Warnier <aw...@ice-sa.com> on 2009/03/20 15:46:06 UTC

[users@httpd] Application design

Hi.

For once, I'd like to pump the collective knowledge and accumulated 
wisdom of the gurus on the list.

I run a document management application, from which users can retrieve 
documents (ms-office, pdf, etc..) through a web application.  From the 
user point of view, documents are accessed via a "logical id", such as 
"12345678", via a link like "http://servername/getdoc/1234567".
An active module on the server processes these requests, determines for 
example that "12345678" corresponds to some document "doc0001.pdf", 
retrieves this document, and returns it to the user with the appropriate 
HTTP headers, for example in this case :
Content-Type : text/pdf
Content-Length: 200000
Content-Disposition: attachment; filename="doc0001.pdf"

So far, so good, it works.

Now, I would like to save space on the server, and compress the original 
documents. So I would for example take "doc0001.pdf", and compress it 
into "doc0001.pdf.zip". (I mean really on the disk of the server, stored 
in compressed form, not just compressed "in transit".)
I would still want the user to use the same link to retrieve the 
document, and I would of course want that this is still seen as a pdf 
document by their browser, and not as a zip file.
I imagine that what I need to do then in my active module, is to return 
the zipped version of the document to the browser with the following 
headers :
Content-Type : text/pdf
Content-Disposition: attachment; filename="doc0001.pdf"
Content-transfer-encoding: zip
Content-Length: (size of the zipped version)

and that the browser will automatically uncompress it and present it to 
the user as an uncompressed pdf document.

Is that true, and is it all there is to it, or am I missing something ?


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


RE: [users@httpd] Application design

Posted by Jorge Medina <jm...@e-dialog.com>.
But I would argue that disk space is cheaper than decompressing files on the server for every request. 8-) 

-----Original Message-----
From: Brian Mearns [mailto:mearns.b@gmail.com] 
Sent: Friday, March 20, 2009 11:17 AM
To: users@httpd.apache.org; aw@ice-sa.com
Subject: Re: [users@httpd] Application design

On Fri, Mar 20, 2009 at 10:46 AM, André Warnier <aw...@ice-sa.com> wrote:
> Hi.
>
> For once, I'd like to pump the collective knowledge and accumulated 
> wisdom of the gurus on the list.
>
> I run a document management application, from which users can retrieve 
> documents (ms-office, pdf, etc..) through a web application.  From the 
> user point of view, documents are accessed via a "logical id", such as 
> "12345678", via a link like "http://servername/getdoc/1234567".
> An active module on the server processes these requests, determines 
> for example that "12345678" corresponds to some document 
> "doc0001.pdf", retrieves this document, and returns it to the user 
> with the appropriate HTTP headers, for example in this case :
> Content-Type : text/pdf
> Content-Length: 200000
> Content-Disposition: attachment; filename="doc0001.pdf"
>
> So far, so good, it works.
>
> Now, I would like to save space on the server, and compress the 
> original documents. So I would for example take "doc0001.pdf", and 
> compress it into "doc0001.pdf.zip". (I mean really on the disk of the 
> server, stored in compressed form, not just compressed "in transit".) 
> I would still want the user to use the same link to retrieve the 
> document, and I would of course want that this is still seen as a pdf 
> document by their browser, and not as a zip file.
> I imagine that what I need to do then in my active module, is to 
> return the zipped version of the document to the browser with the following headers :
> Content-Type : text/pdf
> Content-Disposition: attachment; filename="doc0001.pdf"
> Content-transfer-encoding: zip
> Content-Length: (size of the zipped version)
>
> and that the browser will automatically uncompress it and present it 
> to the user as an uncompressed pdf document.
>
> Is that true, and is it all there is to it, or am I missing something ?
>

I'm not sure content-transfer-encoding is the right header, I think just Content-encoding is what you want. Otherwise, that should work I think, but it requires that people's browsers support zip encoding, which mine, for instance (FF3 on Linux) does not.

If you're going to do this and you don't want to lock anybody out because of browser in-compatibilities, I think you're going to have to parse the request headers, find out if they support the specified encoding, and if not, have your server decompress on the fly before sending.

That's my $0.02.

-Brian

--
Feel free to contact me using PGP Encryption:
Key Id: 0x3AA70848
Available from: http://pgp.mit.edu/

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Application design

Posted by Nick Kew <ni...@webthing.com>.
On Fri, 20 Mar 2009 11:17:13 -0400
Brian Mearns <me...@gmail.com> wrote:

> 
> I'm not sure content-transfer-encoding is the right header, I think
> just Content-encoding is what you want. Otherwise, that should work I
> think, but it requires that people's browsers support zip encoding,
> which mine, for instance (FF3 on Linux) does not.

zip is not a recognised encoding.  You'd have to configure a browser
to unzip it.

gzip is a standard that pretty-much everyone supports.  The other
standard in the HTTP spec is compress (the older .Z compression).

> If you're going to do this and you don't want to lock anybody out
> because of browser in-compatibilities, I think you're going to have to
> parse the request headers, find out if they support the specified
> encoding, and if not, have your server decompress on the fly before
> sending.

mod_negotiation does that for you.  The docs explain it.

-- 
Nick Kew

Application Development with Apache - the Apache Modules Book
http://www.apachetutor.org/

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Application design

Posted by Brian Mearns <me...@gmail.com>.
On Fri, Mar 20, 2009 at 10:46 AM, André Warnier <aw...@ice-sa.com> wrote:
> Hi.
>
> For once, I'd like to pump the collective knowledge and accumulated wisdom
> of the gurus on the list.
>
> I run a document management application, from which users can retrieve
> documents (ms-office, pdf, etc..) through a web application.  From the user
> point of view, documents are accessed via a "logical id", such as
> "12345678", via a link like "http://servername/getdoc/1234567".
> An active module on the server processes these requests, determines for
> example that "12345678" corresponds to some document "doc0001.pdf",
> retrieves this document, and returns it to the user with the appropriate
> HTTP headers, for example in this case :
> Content-Type : text/pdf
> Content-Length: 200000
> Content-Disposition: attachment; filename="doc0001.pdf"
>
> So far, so good, it works.
>
> Now, I would like to save space on the server, and compress the original
> documents. So I would for example take "doc0001.pdf", and compress it into
> "doc0001.pdf.zip". (I mean really on the disk of the server, stored in
> compressed form, not just compressed "in transit".)
> I would still want the user to use the same link to retrieve the document,
> and I would of course want that this is still seen as a pdf document by
> their browser, and not as a zip file.
> I imagine that what I need to do then in my active module, is to return the
> zipped version of the document to the browser with the following headers :
> Content-Type : text/pdf
> Content-Disposition: attachment; filename="doc0001.pdf"
> Content-transfer-encoding: zip
> Content-Length: (size of the zipped version)
>
> and that the browser will automatically uncompress it and present it to the
> user as an uncompressed pdf document.
>
> Is that true, and is it all there is to it, or am I missing something ?
>

I'm not sure content-transfer-encoding is the right header, I think
just Content-encoding is what you want. Otherwise, that should work I
think, but it requires that people's browsers support zip encoding,
which mine, for instance (FF3 on Linux) does not.

If you're going to do this and you don't want to lock anybody out
because of browser in-compatibilities, I think you're going to have to
parse the request headers, find out if they support the specified
encoding, and if not, have your server decompress on the fly before
sending.

That's my $0.02.

-Brian

-- 
Feel free to contact me using PGP Encryption:
Key Id: 0x3AA70848
Available from: http://pgp.mit.edu/

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org