Bernhard,
Thanks for the feedback. I forgot to mention before that I see two use cases: software such as Twitter clients that wants a lightweight way to resolve a given URL (canonical or otherwise) to a shorter URL in the fastest/most lightweight way possible and clients such as web browsers that have already rendered the page and want to extract a URL e.g. for posting to a microblogging service.
In the first case you don't have the content so you should use a HTTP HEAD request to check for the Link: header. This is fast, cheap and requires little work on the server side and little parsing on the client side. These clients should
not retrieve the content unnecessarily - a lot of the time (at least at the start) the result will be negative and some other mechanism will have to be used (e.g. a "traditional" URL shortener). In the latter case we
do have the content from which we can easily parse the <link> elements.
Anchors may or may not work (depending on the browser) if I understand well. As for 301 vs 302, I'd have thought 301 Moved Permanently would be more sensible, but it's not something I fully grok the implications of in this context just yet.
Sam