Subject: Yaron.Redirect.NoRelative

From: Yaron Goland <[email-masked]>
Date: Thu, 10 Feb 2000 23:52:33 -0800

Section 9 of the redirect spec allows for the use of relative URIs in the
reftarget production. Relative URIs are an extremely dangerous feature that
have caused havoc amongst system implementers. Even so, in many
circumstances they offer such a high value that the problems they cause are
worth dealing with. I do not believe that this is one of those
circumstances.
The primary (and in my opinion only) utility for relative URIs is to allow
humans to type in relative URIs so that they can create links and documents
without having to specify their final location. For example, a web site
designer can use Notepad to type in the links for their web page using
relative URLs. That way the web site designer can test out the site in their
test location and not have to go through and change all the links when they
move it to their final destination.

This exact functionality could, of course, be implemented automatically. For
example, Microsoft FrontPage is able to check Office and HTML documents and
identify their links. If an Office or HTML document is moved then FrontPage
will automatically check all the links, see if the move breaks any of them
and if so it will automatically fix them.

Hence the utility of relative URIs is mainly that it saves some humans in
some cases some work. That is, it was easier to implement relative URIs then
to enable all servers to read all file formats and be able to fix links.

There is a second benefit to relative URIs that apply uniquely to protocols
- they save bytes. If one is returning a large number of links that are all
relative to some base one can save bytes by returning the URIs in a relative
form.

The downside to relative URIs is figuring out what the base is. HTTP
provides at least two different mechanisms including the request-URI and the
content-base header. Various data formats then provide their own solutions.
Both HTML and XML have proposals/implementations for what the base should
be. The rules for figuring out the base are complex and rarely implemented
consistently. As the PM for WinInet dealing with the subtleties of relative
URIs was one of the banes of my experience.

What is especially bad is the conflict. If a request has a content-base
header and a base specification in the HTML in the request which one is to
be used? There are rules for figuring this out but they are rarely properly
implemented.

The end result of the confusion is that it is best to avoid relative URIs
whenever possible.

In the case of WebDAV the human benefits for the use of relative URIs are
obviously irrelevant. Therefore the only argument for the use of relative
URIs is that they save bytes. However given that we are using XML the
bandwidth taken by the URIs is the absolutely least of our problems. As such
when choosing between a simple, easy to process rule "the URI is always
absolute" and a rule that introduces additional complexity for little
benefit "the URI is relative", we should clearly come down on the side of
simplicity.

Therefore I move that relative URIs be removed from protocol elements in the
redirect spec and that section 9 be deleted in its entirety.

---

From: "Roy T. Fielding" <[email-masked]>
Date: Sat, 12 Feb 2000 18:08:24 -0800

>have caused havoc amongst system implementers.

That's b.s.  Relative URIs are trivial to implement and the only reason
that havoc occurs is because some HTML authoring tools try to be bugward
compatible with Mosaic 1.0.  Protocol engines have no such constraint.

....Roy