couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COUCHDB-2583) ensure_full_commit requires empty but typed content or it will unexpectedly drops the connection
Date Mon, 16 Feb 2015 16:46:13 GMT

    [ https://issues.apache.org/jira/browse/COUCHDB-2583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14322979#comment-14322979
] 

ASF GitHub Bot commented on COUCHDB-2583:
-----------------------------------------

GitHub user samueltardieu opened a pull request:

    https://github.com/apache/couchdb/pull/303

    Consume JSON body even when its content is ignored

    "_ensure_full_commit" and "_compact" require that the content-type be set to "application/json".
However, when some content is provided (such as "{}" in order to send a valid JSON external
representation
    for the empty object), CouchDB needs to ensure that this content is read from the incoming
HTTP request.
    
    Fixes COUCHDB-2583

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/samueltardieu/couchdb consume-json-body

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/couchdb/pull/303.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #303
    
----
commit 120ce333e8103d2cd8cf79fefaf1ced6d01db893
Author: Samuel Tardieu <sam@rfc1149.net>
Date:   2015-02-16T13:17:10Z

    Consume JSON body even when its content is ignored
    
    "_ensure_full_commit" and "_compact" require that the content-type
    be set to "application/json". However, when some content is provided
    (such as "{}" in order to send a valid JSON external representation
    for the empty object), CouchDB needs to ensure that this content
    is read from the incoming HTTP request.
    
    Fixes COUCHDB-2583

----


> ensure_full_commit requires empty but typed content or it will unexpectedly drops the
connection
> ------------------------------------------------------------------------------------------------
>
>                 Key: COUCHDB-2583
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2583
>             Project: CouchDB
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: HTTP Interface
>    Affects Versions: 1.6.1
>            Reporter: Samuel Tardieu
>         Attachments: 0001-Consume-JSON-body-even-if-ignored.patch
>
>
> When given an non-empty (but valid) JSON content, some methods such as {{_ensure_full_commit}}
will abruptly drop a persistent connection instead of waiting for a new HTTP request even
though no error is signaled in CouchDB logs:
> {code:title=Request}
> POST /testdb1/_ensure_full_commit HTTP/1.1
> Host: localhost:5984
> Accept: application/json
> Content-Type: application/json
> Content-Length: 2
> {}
> {code}
> {code:title=Response}
> HTTP/1.1 201 Created
> Server: CouchDB/1.6.1 (Erlang OTP/17)
> Date: Mon, 16 Feb 2015 11:49:11 GMT
> Content-Type: application/json
> Content-Length: 53
> Cache-Control: must-revalidate
> {"ok":true,"instance_start_time":"1424085277160411"}
> {code}
> [connection is closed without warning by CouchDB at this point]
> To remedy that, one could try to give an empty content, but some frameworks (such as
spray.io) will systematically omit the {{Content-Type}} header in this case since it makes
little sense to type empty content. However, CouchDB will reject the request even though it
does *not* want any content:
> {code:title=Request}
> POST /testdb1/_ensure_full_commit HTTP/1.1
> Host: localhost:5984
> Accept: application/json
> Content-Length: 0
> {code}
> {code:title=Response}
> HTTP/1.1 415 Unsupported Media Type
> Server: CouchDB/1.6.1 (Erlang OTP/17)
> Date: Mon, 16 Feb 2015 11:55:52 GMT
> Content-Type: application/json
> Content-Length: 78
> Cache-Control: must-revalidate
> {"error":"bad_content_type","reason":"Content-Type must be application/json"}
> {code}
> This makes it impossible to use those methods with such frameworks. CouchDB should not
drop the connection and ignore the data if {{Content-Length}} is not 0, nor require that data
be typed with {{application/json}} if it is going to ignore it anyway or if it requires it
to be empty.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message