Re: Cookie inspection

2007-05-29 Thread Dag-Erling Smørgrav
Omar Kilani [EMAIL PROTECTED] writes:
 I'd like to modify req.hash in vcl_hash to take into account the value
 of this particular cookie [...]
 From looking through the varnish-cache code, I don't think this type
 of operation is supported, and I'm not sure what the best way to
 represent this in VCL is.

Poul-Henning is working on making multi-value headers accessible as
associative arrays, e.g. req.http.cache-control[max-age] for
Cache-control: max-age.  This implies not only inspection but also
modification of individual fields.  Your patch is a step in the right
direction, though it probably duplicates (or conflicts with) part of
Poul-Henning's work.

In any case, could you please open a ticket with the patch as an
attachment?

 Doing something like req.http.Cookie.LANGUAGE *could* theoretically do
 the right thing (and use http_GetHdrField, although some browsers can
 send multiple values for the same cookie name... :)

AFAIR from RFC2616, if multiple values are provided for the same key,
only the last one applies.

DES
-- 
Dag-Erling Smørgrav
Senior Software Developer
Linpro AS - www.linpro.no
___
varnish-misc mailing list
varnish-misc@projects.linpro.no
http://projects.linpro.no/mailman/listinfo/varnish-misc


Re: Cookie inspection

2007-05-29 Thread Poul-Henning Kamp
In message [EMAIL PROTECTED], Omar
 Kilani writes:

Including the entire req.http.Cookie in the hash key is suboptimal as
there are a bunch of other cookies set (session cookies, etc)
depending on other variables.

Doing something like req.http.Cookie.LANGUAGE *could* theoretically do
the right thing (and use http_GetHdrField, although some browsers can
send multiple values for the same cookie name... :) and *looks* right,
but obviously has a very different meaning in VCL where it compiles
to:

The Planned syntax is:
req.http.Cookie[language]

and just as for http headers, the headers will be read sequentially
and the last found value is used.

http://treehou.se/~omar/cookie-inspection-1.patch

Not bad :-)

The other thing I'd like to be able to do is have some sort of 'first
match over an array of header values' VCL construct, so you could vary
the hash by whatever languages in Accept-Language your site supports

Does your backend include a proper Vary: header when it selects on
language ?

-- 
Poul-Henning Kamp   | UNIX since Zilog Zeus 3.20
[EMAIL PROTECTED] | TCP/IP since RFC 956
FreeBSD committer   | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
___
varnish-misc mailing list
varnish-misc@projects.linpro.no
http://projects.linpro.no/mailman/listinfo/varnish-misc


Re: Cookie inspection

2007-05-29 Thread Omar Kilani
On 5/29/07, Poul-Henning Kamp [EMAIL PROTECTED] wrote:
 In message [EMAIL PROTECTED], Omar
  Kilani writes:

 Doing something like req.http.Cookie.LANGUAGE *could* theoretically do
 the right thing (and use http_GetHdrField, although some browsers can
 send multiple values for the same cookie name... :) and *looks* right,
 but obviously has a very different meaning in VCL where it compiles
 to:

 The Planned syntax is:
 req.http.Cookie[language]

 and just as for http headers, the headers will be read sequentially
 and the last found value is used.

That makes a lot more sense. :)

Out of curiosity, are things like this documented on Trac or somewhere else?

I probably missed it searching the tickets - has this work been started?

 http://treehou.se/~omar/cookie-inspection-1.patch

 Not bad :-)

Hehe - I really just meant to illustrate what I was getting at with
the patch. ;)

It took longer to write the email than to code up the patch, which I
think says a lot about the hackability of the code and how easy it is
to understand.

 The other thing I'd like to be able to do is have some sort of 'first
 match over an array of header values' VCL construct, so you could vary
 the hash by whatever languages in Accept-Language your site supports

 Does your backend include a proper Vary: header when it selects on
 language ?

Yes, but I'm not sure how Vary on Accept-Language is supposed to work
- does it just add the entire value to the hash key or?

Wouldn't the hit rate be low on the cached content if this was the case?

For example, I'd serve en-US to all these browsers (whose language
settings I haven't changed):

Opera (which sends the following Accept-Language value):

en,ja;q=0.9,fr;q=0.8,de;q=0.7,es;q=0.6,it;q=0.5,nl;q=0.4,sv;q=0.3,nb;q=0.2,da;q=0.1,fi;q=0.1,pt;q=0.1,lv;q=0.1,zh-CN;q=0.1,zh-TW;q=0.1,ko;q=0.1,en;q=0.1

Safari:

en

Camino:

en,ja;q=0.9,fr;q=0.9,de;q=0.8,es;q=0.8,it;q=0.7,nl;q=0.6,sv;q=0.6,nb;q=0.5,da;q=0.4,fi;q=0.4,pt;q=0.3,lv;q=0.3,zh-Hans;q=0.2,zh-Hant;q=0.1,ko;q=0.1

But would they all be cached independently and served different
versions of the same document?

Thanks.

Regards,
Omar
___
varnish-misc mailing list
varnish-misc@projects.linpro.no
http://projects.linpro.no/mailman/listinfo/varnish-misc


Cookie inspection

2007-05-28 Thread Omar Kilani
Hi there,

I have a web application which supports a bunch of interface/website
languages via Accept-Language headers and/or a user-overridden cookie
value.

I'd like to modify req.hash in vcl_hash to take into account the value
of this particular cookie (similar to what Denis does with
Accept-Encoding here:
http://projects.linpro.no/pipermail/varnish-misc/2007-May/000407.html
-- neat! :)

From looking through the varnish-cache code, I don't think this type
of operation is supported, and I'm not sure what the best way to
represent this in VCL is.

Including the entire req.http.Cookie in the hash key is suboptimal as
there are a bunch of other cookies set (session cookies, etc)
depending on other variables.

Doing something like req.http.Cookie.LANGUAGE *could* theoretically do
the right thing (and use http_GetHdrField, although some browsers can
send multiple values for the same cookie name... :) and *looks* right,
but obviously has a very different meaning in VCL where it compiles
to:

VRT_GetHdr(sp, 1, \020Cookie.LANGUAGE:)

I've created a small patch:

http://treehou.se/~omar/cookie-inspection-1.patch

Which implements VRT_GetHdrField and cookie inspection.

This should be a lot more general, but is this something that varnish
could potentially support?

The other thing I'd like to be able to do is have some sort of 'first
match over an array of header values' VCL construct, so you could vary
the hash by whatever languages in Accept-Language your site supports
-- but the cookie thing would be workable too.

Thanks!

Regards,
Omar
___
varnish-misc mailing list
varnish-misc@projects.linpro.no
http://projects.linpro.no/mailman/listinfo/varnish-misc