views:

207

answers:

4

When you set a cookie, you set the raw cookie data, and some metadata. This metadata includes the path for where the cookie is valid, the expiration time of the cookie, and so on.

When a browser performs a request, what exactly will the browsers send with it? Will it send the full cookie, with all the "metadata"? Or only the actual data of the cookie, without the metadata?

A: 

the user-agent will re-transmit the path, domain, and port attributes if the cookie was set under RFC2965 (via the Set-Cookie2 header) and if the attribute was specified by the server. a sample request might contain:

Cookie: $Version="1";
  name="val"; $Path="/site"; $Domain=".example.com"; $Port="81";
  name="val"; $Path="/site/dir"; $Domain=".example.com"; $Port="81"

if the cookie was specified using the original netscape Set-Cookie header, no attributes will be re-transmitted. if multiple cookies with the same name (but different paths) are valid for the request, all matching cookies will be supplied. an example request:

Cookie: name=val; name=val2

the full spec is here:

http://tools.ietf.org/html/rfc2965

the original netscape spec is here:

http://web.archive.org/web/20070805052634/http://wp.netscape.com/newsref/std/cookie_spec.html

jspcal
Set-Cookie is the Response header that returns the definition of the cookie, the question is about what gets sent back to the server when other requests occur.
AnthonyWJones
The `Set-Cookie2` header - is this a standard header that most browsers will understand?
August Lilleaas
ie yes, opera yes, not sure about ff. server can use old-style cookies if client doesn't support it.
jspcal
+7  A: 

No only the value of the cookie is returned in subsequent requests, the other metadata stays on the client.

When you define a cookie on the server a Set-Cookie header is created in the response carrying the name, value and other metadata about the cookie. Multiple Cookies will create multiple Set-Cookie headers in the response.

When the browser makes subsequent requests it checks its "database" of available cookies to see which cookies are appropriate for the path being requested. It then creates a single Cookie header in the request that carries just a series of name/value pairs of the qualifying cookies.

Its important to keep tight control on the number of cookies and the size of the data otherwise you may find that the weight of cookie data being sent for each and every request can be deterimental to performance. This would be much worse if the metadata were returned with the cookies as well.

AnthonyWJones
+1  A: 

The server sets the cookie with the "Set-Cookie" header. This contains the metadata (path and expiry), if specified. The client (browser) only sends the cookie itself in a "Cookie" header.

Firebug is a useful tool for Firefox to view all these headers. Similar tools should be available for other browsers.

Ralf
+1  A: 

only the cookie data is sent to server,other metadata is for the browser to perform some actions like cookie expiration

appusajeev