the version on the tip handles now identity and q-values.
The logic sketched below does not handle cases, where e.g. 
identiy or * is
higher than gzip qvalue, or explicit forbidding of gzip. The 
values are doubles,
so one has to be careful with comparisons. I am not sure 
about the logic for
http/1.1, if we really should assume gzip by default.

-gustaf

On 27.10.12 15:03, Stephen Deasey wrote:
> On Sat, Oct 27, 2012 at 1:13 PM, Gustaf Neumann <neum...@wu.ac.at> wrote:
>> On 26.10.12 15:47, Stephen Deasey wrote:
>>> I think the spec says that for HTTP/1.1, if the client doesn't
>>> explicitly say to NOT send the body gzipped, say by using a q value of
>>> 0 (which we don't actually check for, woops...), then the server can
>>> choose the encoding, although it should prefer the identity, unless
>>> that's unavailable. So we're being very pushy...
>> now we do check for the qvalues used in connection with
>> gzip. So, a client can now specify explicitly, that gzip is
>> NOT wanted via "gzip; q=0". What the code still does not do
>> is comparing the identity-qvalue with the gzip-qvalue or
>> combination with wildcards "....*;q=..."
> Jeff had a go at this as well:
>
>    https://bitbucket.org/jeffr/naviserver-queues/changesets
>
> Here's the feedback I tacked on to the end of a mercurial question via email:
>
>
>
> It bothers me a bit that a fresh Ns_Set has to be allocated, and also
> the parsing code is pretty gnarly and hard to verify. It looks about
> right, but I'd have to resort to pencil and paper to be more sure, and
> the fact I haven't done that reminds me that people tend to not look
> too closely at these things and that's where bugs can fester. I wonder
> if there's another way of doing this...
>
> You'll have to double check the details, but IIRC q values go from
> 0-999. If 'gzip' is present without a q value then it's as if it had
> q=1 -- that's the default. If it's not present, it's as if it were but
> with q=0. So, how about a function like Ns_HeaderQ(header, attr) which
> returns the integer q value for the specified atttribute. It simply
> uses strstr to find gzip. If it doesn't, return 0. If it does, then
> check for a q=. If it's the character '0', return 0. If there's no q,
> return 1. If it's something else, parse the int and return that. Then
> you can use it something like:
>
>
> if (!(connPtr->flags & NS_CONN_SENTHDRS)
>         && !(connPtr->flags & NS_CONN_SKIPBODY)) {
>
>      contentEncoding = Ns_SetIGet(Ns_ConnHeaders(conn), "Accept-Encoding");
>
>      if (Ns_HeaderQ(contentEncoding, "gzip") > 0 ||
> Ns_HeaderQ(contentEncoding, "*") > 0) {
>          gzip = 1;
>
>
> I'm not sure how eager the server should be sending gzipped content.
> An alternative to the above would be to keep the existing eager use of
> gzip, but respect the client's negative assertion:
>
>
> if (!(connPtr->flags & NS_CONN_SENTHDRS)
>         && !(connPtr->flags & NS_CONN_SKIPBODY)) {
>
>      contentEncoding = Ns_SetIGet(Ns_ConnHeaders(conn), "Accept-Encoding");
>
>      if (connPtr->request->version >= 1.1) {
>          if ((!Ns_HeaderQ(contentEncoding, "gzip", &q) || q > 0)
>              && (!Ns_HeaderQ(contentEncoding, "*", &q) || q > 0)) {
>              gzip = 1;
>          }
>      } else if ((Ns_HeaderQ(contentEncoding, "gzip", &q) && q > 0)
>                 || (Ns_HeaderQ(contentEncoding, "*", &q) && q > 0)) {
>          gzip = 1;
>      }
>
>
> Here Ns_HeaderQ is modified to return NS_TRUE or NS_FALSE depending on
> whether the attribute is present, and the q value is returned into the
> given variable. HTTP 1.0 clients have to explicitly ask for gzip, 1.1
> clients get it unless the say they don't want it.
>
> ------------------------------------------------------------------------------
> WINDOWS 8 is here.
> Millions of people.  Your app in 30 days.
> Visit The Windows 8 Center at Sourceforge for all your go to resources.
> http://windows8center.sourceforge.net/
> join-generation-app-and-make-money-coding-fast/
> _______________________________________________
> naviserver-devel mailing list
> naviserver-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/naviserver-devel


------------------------------------------------------------------------------
WINDOWS 8 is here. 
Millions of people.  Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to