The 2 biggest culprits here are Cookies and View State (but this applies to all header variables).
If these are enabled by default for every element, each request header is going to grow
to the point where it can easily dwarf the actual download size.
Remember that a user's bandwidth for upload is usually smaller than for download.
Can you really justify hitting the server with hundreds of kilobytes of
data just to display 1KB of information to the end user?
When the cookie crumbles
View State optimisation
The Net panel in the Firebug extension for Firefox, or Fiddler will show the traffic between the client and server.
You need to know your application and its data well enough to pass only the bare minimum needed between the client and server.