phranque - 7:38 am on May 18, 2012 (gmt 0)
if you can always redirect every non-canonical request to the canonical url then that takes care of canonicalization.
in the cases where this isn't possible, then you will need the link rel canonical element.
a 301 is part of the HTTP protocol specification created by IETF and W3C and is incontrovertible.
a link rel canonical element is a non-standard implementation created by search engines, may be handled inconsistently by various search engines, and may in fact be treated as a suggestion rather than a directive.