Vincent,

I've written quite a bit on this topic over the last few weeks, so you might
find some of the stuff in list archives useful.  I'll try to summarize
things again here.

All cookies have a domain and path associated with them.  The path can be
specified explicitly using attributes on the set-cookie header or they be
set to default values as defined by RFC 2109.  The domain and path are
important because they determine what cookies are allowed to be sent with
later requests (in a coookie header).  There are very explicit rules in RFC
2109 about what cookies are allowed be sent a server based on the request's
domain and URL.

The notion that cookies don't have to have domains and paths comes from, I
believe, an incomplete reading of the specification.  RFC 2109 does say that
the domain and path attributes are optional on the set-coookie header, but
it follows up by saying that if those attributes are not in the header that
the domain and path are set to known default values (the request host and
the request path up to but not including the right-most slash).  It is also
important to keep track of whether the domain and path attributes were
specified explicitly on the set-cookie header or have default values because
that effects what data is included in the cookie header (see section 4.3.4
in the paragraph following the syntax description).

The createCookieHeader() method generates a cookie header from a list of
cookies.  The cookies are selected according to the rules given in RFC
2109/4.3.4 (see 'Domain selection', 'Path selection' and 'Max-age
selection').  There is no way to select cookies for a cookie header without
having a domain and path.  Thus, createCookieHeader() now throws an
IllegalArgumentException if either domain or path is null.  If there are
cookies in the list passed to createCookieHeader() that don't have domain or
path (i.e. getDomain() or getPath() return null) then they are excluded from
the selection process and won't appear in the generated cookie header.  This
is all based on the domain-match algorithm given in section 2 of RFC 2109.  

All this is done to prevent cookies from 'escaping' or 'leaking' out to
sites where they don't belong (see section 7.2).

Marc "Cookie" Saegesser 

> -----Original Message-----
> From: Vincent Massol [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, March 21, 2002 5:13 PM
> To: [EMAIL PROTECTED]
> Subject: [HttpClient] Still problems with null domains and paths
> 
> 
> Hi,
> 
> The Cactus build is breaking again. The error is that Cactus 
> allows the
> user to create cookies with no domain and/or no path. This seems to be
> allowed by the spec (RFC 2109) :
> 
> "
>    set-cookie      =       "Set-Cookie:" cookies
>    cookies         =       1#cookie
>    cookie          =       NAME "=" VALUE *(";" cookie-av)
>    NAME            =       attr
>    VALUE           =       value
>    cookie-av       =       "Comment" "=" value
>                    |       "Domain" "=" value
>                    |       "Max-Age" "=" value
>                    |       "Path" "=" value
>                    |       "Secure"
>                    |       "Version" "=" 1*DIGIT
> 
> [...]Each cookie begins with a NAME=VALUE pair, followed by 
> zero or more
> semi-colon-separated attribute-value pairs. The syntax for
> attribute-value pairs was shown earlier. The specific 
> attributes and the
> semantics of their values follows. The NAME=VALUE attribute- 
> value pair
> must come first in each cookie. The others, if present, can 
> occur in any
> order [...]
> "
> 
> However the method Cookie.createCookieHeader(...) does not allow for
> null domains and paths.
> 
> Thus, when I call in cactus :
> 
> Header cookieHeader =
>     org.apache.commons.httpclient.Cookie.createCookieHeader(
>     HttpClientHelper.getDomain(theRequest, theConnection),
>     HttpClientHelper.getPath(theRequest, theConnection),
>     httpclientCookies);
> 
> where httpclientCookies is an array of cookies with no path 
> nor domain,
> the Cookie.match() code in createCookieHeader() fails and thus
> createCookieHeader returns null, which is not correct according to the
> spec above.
> 
> Am I missing something ? :-)
> 
> Thanks
> -Vincent
> 
> 
> 
> --
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> 

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to