couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <...@apache.org>
Subject Re: Default response is text/plain
Date Mon, 02 Feb 2009 10:49:26 GMT
Hi Brian,

good digging here, highly appreciated!

I believe we put this in (and there is explicit code
that does it) , so that browsers will render JSON
as text and not offer the result for download.


Cheers
Jan
--


On 2 Feb 2009, at 10:42, Brian Candler wrote:

> I was going to post this on JIRA but thought I'd better raise it  
> here first,
> in case this is intentional behaviour.
>
> By default, all Couchdb responses have Content-Type: text/plain  
> rather than
> application/json - observed using tcpdump on a ruby app using couch- 
> potato,
> and easily replicated using telnet.
>
> $ telnet localhost 5984
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> GET /test_suite_db HTTP/1.0
>
> HTTP/1.0 200 OK
> Server: CouchDB/0.9.0a739811-incubating (Erlang OTP/R12B)
> Date: Mon, 02 Feb 2009 09:31:36 GMT
> Content-Type: text/plain;charset=utf-8        <<<<<<<<
> Content-Length: 171
> Cache-Control: must-revalidate
>
> {"db_name":"test_suite_db","doc_count":1,"doc_del_count": 
> 1,"update_seq":7,"purge_seq":0,"compact_running":false,"disk_size": 
> 15755,"instance_start_time":"1233566693355400"}Connection closed by  
> foreign host.
>
> However, if you explicitly ask for application/json with an Accept:  
> header,
> you get that Content-Type instead.
>
> $ telnet localhost 5984
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> GET /test_suite_db HTTP/1.0
> Accept: application/json
>
> HTTP/1.0 200 OK
> Server: CouchDB/0.9.0a739811-incubating (Erlang OTP/R12B)
> Date: Mon, 02 Feb 2009 09:32:03 GMT
> Content-Type: application/json        <<<<<<<<
> Content-Length: 171
> Cache-Control: must-revalidate
>
> {"db_name":"test_suite_db","doc_count":1,"doc_del_count": 
> 1,"update_seq":7,"purge_seq":0,"compact_running":false,"disk_size": 
> 15755,"instance_start_time":"1233566693355400"}Connection closed by  
> foreign host.
>
> This seems odd behaviour to me. The "negotiated" content is no  
> different,
> and the response clearly *is* application/json, whether or not you  
> provide
> an Accept: header.
>
> Is this a workaround for some client bug? Or to make Couchdb work  
> better
> with browsers for manual interaction?
>
> Now, as it happens: couch-potato/couchrest/rest-client is actually  
> sending
>    Accept: application/xml
> and the response which comes back is
>    Content-Type: text/plain;charset=utf-8
>
> Of course, the client stack is requesting the wrong media type  
> entirely, but
> under this circumstance I'd still expect Couchdb to say that the  
> response is
> application/json rather than text/plain, as being a more accurate
> description of what has been returned.
>
> So my suggested behaviour would be: only return test/plain if the  
> Accept:
> header is present, *and* it contains text/plain, *and* this is higher
> priority than application/json (if that is present too). Otherwise  
> return
> application/json.
>
> But as I say, maybe this has been discussed before and the current  
> behaviour
> is entirely intentional.
>
> Thanks,
>
> Brian.
>


Mime
View raw message