Github user olafura commented on the pull request:

    https://github.com/apache/couchdb/pull/284#issuecomment-64901623
  
    @rnewson That thing is that the change was a non feature, it added 
constraints to the pattern matching so it would pick up **q= value**, which 
breaks any comparison you can make. Because browsers say they support really 
anything with that value: 
http://stackoverflow.com/questions/10496570/what-is-the-purpose-of-the-q-values-in-the-http-accept-request-header.
 
    
    Every framework it seems at some point has someone that adds support for 
those thing and everything breaks.
    
    The reason why the initial patch didn't break badly at first is that it 
only did the comparison on `text/html`, which kind of works. But then people 
added it also to `application/json`, and added that first which totally broke 
everything.
    
    The intentions were good and I have a patch which is stricter about 
matching it to `text/html` and `application/json` that can be merged. But 
please don't try to propagate this bug to **chttp**.
    
    If you do a web search you can find a lot of bugs caused by respecting the 
q value plus wild card usage when doing comparisons. It's also an overkill, it 
does not add any value, just takes it away.
    
    The browsers say with the `Accept` header, please bring us something in 
these format, but anything is also fine with us.
    
    My test takes a real world use of the `Accept` header and most of the 
versions **CouchDB** fail it which is really bad.
    
    There are three options:
    --------------------------------
    
    *  Keep the patch like it is
    
    *  Update the patch with stricter matching for the full `application/json` 
and `text/html`, which is in the comments.
    
    *  Update the patch to select the quality of the matching, so to return the 
one the the client prefers, this is the most correct solution and I'll make a 
patch that implements this, if you choose so.
    
    I'll also make patches for **chttp** for the two latter options if you 
choose that.
    
    http://www.django-rest-framework.org/api-guide/content-negotiation/
    http://shiflett.org/blog/2011/may/the-accept-header
    
http://docs.openstack.org/api/openstack-network/1.0/content/Request_Response_Types.html
    https://github.com/PerlDancer/Dancer2/issues/712
    http://www.newmediacampaigns.com/blog/browser-rest-http-accept-headers
    https://www.npmjs.org/package/contenttype //The *q-value*, if any, is 
ignored.
    https://pypi.python.org/pypi/negotiator/1.0.0 //possibly a better way of 
doing it but I don't thing for this usecase needed
    http://blog.bigbinary.com/2010/11/23/mime-type-resolution-in-rails.html
    https://clojure-liberator.github.io/liberator/tutorial/conneg.html
    https://docs.oracle.com/cd/E19776-01/820-4867/ghrpv/
    http://mojolicio.us/perldoc/Mojolicious/Types.txt
    https://parse.com/docs/js/symbols/express.Request.html


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to