> setUrl / getUrl[1] should allow for relative urls. This reflects how the HTTP message also looks like (e.g.: a Host: header, and a relative or absolute url).
A full absolute url may in certain cases not be possible to determine.
Agreed.
> The __toString[2] method on Message/Request/Response is sugar, or perhaps nice for debugging, but not strictly needed. This functionality can be delegated to a different object, and in the interest of keeping it simple, I'd opt to remove it.
That's a fair point.
> Support for objects implementing __toString() in setBody() is imho also a bad idea.
I think it makes the API easy to use, works for most simple use cases,
and it defers the need to wait on some sort of stream API PSR to
support streaming (e.g, and object that supports read(), write(),
__toString(), etc).
> The proper thing to do is, imho, to define a separate body interface with a specific method that returns the contents of the body, but that in itself, I feel, should be out of scope for an initial PSR.
Yes, that would be outside the scope of the HTTP PSR, but it would be
the best route. Guzzle currently does this with it's stream API. If
you and everyone else feels strongly that this is a blocker, then an
HTTP message PSR should be blocked on a stream abstraction PSR.