As James noted, this is a requirements document - let's not to be so specific that we constrain various implementations that will work.
Yes, we should specify canonicalization must happen - but not *where* it should happen - and see how proposed implementation proposals deal with it.
Proposed substitute language for [29] and [30]:
"The protocol MUST specify canonicalization. If canonicalization is done at the server, the server should be able to recognize requests that have already been canonicalized and should treat them as such."