[ https://issues.apache.org/jira/browse/COUCHDB-1368?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13497290#comment-13497290 ] Jan Lehnardt commented on COUCHDB-1368: --------------------------------------- The main CouchDB repo lives here: https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=summary Branches are not mirrored to GitHub at this point (sorry), but I pushed it to my fork: https://github.com/janl/couchdb/tree/1368-fix-multipart-header-parts. The commit in question: https://github.com/janl/couchdb/commit/18971de71c93c3a00e408b3d4eb67be8c695150c Here’s a request dump: > curl -Nv $COUCH/test/asd?attachments=true -H "Accept: multipart/related,*/*;" * About to connect() to 127.0.0.1 port 5984 (#0) * Trying 127.0.0.1... * connected * Connected to 127.0.0.1 (127.0.0.1) port 5984 (#0) > GET /test/asd?attachments=true HTTP/1.1 > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5 > Host: 127.0.0.1:5984 > Accept: multipart/related,*/*; > < HTTP/1.1 200 OK < Server: CouchDB/1.3.0a-b9af7ea-git (Erlang OTP/R15B02) < ETag: "9-4310e4b1fcab6822344790d37fb5ddea" < Date: Wed, 14 Nov 2012 18:04:57 GMT < Content-Type: multipart/related; boundary="a38b2d614bb2a8d70e31050a0e2e11a5" < Content-Length: 493 < --a38b2d614bb2a8d70e31050a0e2e11a5 content-type: application/json {"_id":"asd","_rev":"9-4310e4b1fcab6822344790d37fb5ddea","foo":"var","_attachments":{"test.txt":{"content_type":"text/plain","revpos":8,"digest":"md5-7xbQv30HNBSgLpMDsQTH7A==","length":12,"follows":true,"encoding":"gzip","encoded_length":30}}} --a38b2d614bb2a8d70e31050a0e2e11a5 Content-ID: test.txt Content-Type: text/plain Content-Length: 30 Content-Transfer-Encoding: gzip K??WHJ,?*.?5? --a38b2 The closing boundary is off, I seem to have a bug in the main request’s Content-Length calculation, but this is the direction this is going. > multipart/related document body doesn't identify which part is which attachment > ------------------------------------------------------------------------------- > > Key: COUCHDB-1368 > URL: https://issues.apache.org/jira/browse/COUCHDB-1368 > Project: CouchDB > Issue Type: Bug > Components: HTTP Interface > Reporter: Jens Alfke > Priority: Minor > > If you GET a document with attachments in multipart/related format (by adding ?attachments=true and setting Accept:multipart/related), the MIME bodies for the attachments have no headers. This makes it difficult to tell which one is which. Damien says they're in the same order that they appear in the document's "_attachments" object ... which is fine if you're Erlang, because Erlang preserves the order of keys in a JSON object, but no other JSON implementation I know of does that (because they use hashtables instead of linked lists.) > The upshot is that any non-Erlang code trying to parse such a response will have to do some by-hand parsing of the JSON data to get the _attachment keys in order. > This can be fixed by adding a "Content-ID" header to each attachment body, whose value is the filename. It would be nice if other standard headers were added too, like "Content-Type", "Content-Length", "Content-Encoding", as this would make it work better with existing MIME multipart libraries. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira