[ https://issues.apache.org/jira/browse/COUCHDB-583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12783744#action_12783744 ] Filipe Manana commented on COUCHDB-583: --------------------------------------- Using a filter like mime type for deciding whether or not to store the attachments in the "gziped" form seems a good idea to me. mod_gzip has that kind of filter for deciding whether a response is gziped or not. An example of mod_gzip config: mod_gzip_item_include mime ^text/html$ mod_gzip_item_include mime ^text/plain$ mod_gzip_item_include mime ^httpd/unix-directory$ I do like that approach, but since I am a newbie with Couch's code/implementation, I don't know if storing the attachments directly in gziped form will break anything else. couch_stream could compress attachment data when receiving it and write each compressed block to disk. Then, when requesting an attachment download, the client would have to send the header "Accept-Encoding: gzip" in order to get the compressed data. If it doesn't send that header, we would send him the attachment in the uncompressed form. I volunteer for implementing it if you agree. cheers > adding ?compression=(gzip|deflate) optional parameter to the attachment download API > ------------------------------------------------------------------------------------ > > Key: COUCHDB-583 > URL: https://issues.apache.org/jira/browse/COUCHDB-583 > Project: CouchDB > Issue Type: New Feature > Components: HTTP Interface > Environment: CouchDB trunk revision 885240 > Reporter: Filipe Manana > Attachments: jira-couchdb-583-1st-try-trunk.patch, jira-couchdb-583-2nd-try-trunk.patch > > Original Estimate: 24h > Remaining Estimate: 24h > > The following new feature is added in the patch following this ticket creation. > A new optional http query parameter "compression" is added to the attachments API. > This parameter can have one of the values: "gzip" or "deflate". > When asking for an attachment (GET http request), if the query parameter "compression" is found, CouchDB will send the attachment compressed to the client (and sets the header Content-Encoding with gzip or deflate). > Further, it adds a new config option "treshold_for_chunking_comp_responses" (httpd section) that specifies an attachment length threshold. If an attachment has a length >= than this threshold, the http response will be chunked (besides compressed). > Note that using non chunked compressed body responses requires storing all the compressed blocks in memory and then sending each one to the client. This is a necessary "evil", as we only know the length of the compressed body after compressing all the body, and we need to set the "Content-Length" header for non chunked responses. By sending chunked responses, we can send each compressed block immediately, without accumulating all of them in memory. > Examples: > $ curl http://localhost:5984/testdb/testdoc1/readme.txt?compression=gzip > $ curl http://localhost:5984/testdb/testdoc1/readme.txt?compression=deflate > $ curl http://localhost:5984/testdb/testdoc1/readme.txt # attachment will not be compressed > $ curl http://localhost:5984/testdb/testdoc1/readme.txt?compression=rar # will give a 500 error code > Etap test case included. > Feedback would be very welcome. > cheers -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.