This is generally part of HTTP. From the HTTP 1.1 RFC 2616
  Implementors should be aware that the
  software represents the user in their
  interactions over the Internet, and
  should be careful to allow the user to
  be aware of any actions they might
  take which may have an unexpected
  significance to themselves or others.
  
  In particular, the convention has been
  established that the GET and HEAD
  methods SHOULD NOT have the
  significance of taking an action other
  than retrieval. These methods ought to
  be considered "safe". This allows user
  agents to represent other methods,
  such as POST, PUT and DELETE, in a
  special way, so that the user is made
  aware of the fact that a possibly
  unsafe action is being requested.
  
  Naturally, it is not possible to
  ensure that the server does not
  generate side-effects as a result of
  performing a GET request; in fact,
  some dynamic resources consider that a
  feature. The important distinction
  here is that the user did not request
  the side-effects, so therefore cannot
  be held accountable for them.
In other words, it's not enforced, but it's really bad form for a GET request to have side-effects. Imagine if a user bookmarks a URL which does updates something, for example - they probably wouldn't expect that to happen.