Subject: Re: Format of RTSP URLs

From: Rob Lanphier <[email-masked]>
Date: Tue, 15 Jul 1997 11:52:44 -0700

At 11:03 AM 7/15/97 -0700, Roy T. Fielding wrote:
>robla wrote:
>>I think this may be acceptable, but there's one other possible requirement
>>I'd like to mention.  It would be nice to have the ability to have relative
>>URLs, so that, for example, the following scenario can play out (using ":"
>>as a server side fragment identifier for the time being)
>>
>>C->S  DESCRIBE rtsp://foo/db/moviebase?movie=twister RTSP/1.0 1
>>
>>S->C  RTSP/1.0 200 1 OK
>>      Content-length: 178
>>      Content-type: application/sdp
>>
>>      s= sample rtsp presentation
>>      r = rtsp://foo/db/moviebase?movie=twister   /* aggregate URL*/
>>      m= audio 0 RTP/AVP 0
>>      r = :track=audio1                           /* URL to control audio*/
>>      m=video 0 RTP?AVP 26
>>      r = :track=video1                           /* URL to control video*/
>>
>>At this point, the client can easily discern that the audio track and the
>>video track are indeed merely fragments of the same object on the server,
>>and not separately controlled entities.  I'm not sure how this would work
>>with ";" parameters, since the relative behavior defined in 1808 is
>>different than what I'd expect above (which is more akin to "#").
>
>Those relative URLs would resolve to
>
>      rtsp://foo/db/:track=audio1
>      rtsp://foo/db/:track=video1
>
>which is obviously not what you would want.  

I'm not aware that there is currently a spec for server-side fragments (and
colons beyond the port position of an URL), which is what I'm suggesting is
a necessary feature for relative URLs to work.  I would expect that the
rules that apply to client-side fragments ("#whatever") would also apply to
server-side fragments.

I'd suggest they resolve to the following:
     rtsp://foo/db/moviebase?movie=twister:track=audio1
     rtsp://foo/db/moviebase?movie=twister:track=video1

...just as if you were to replace ":" with "#".  The colon may be a bit
overloaded here, and may be too easily confused with semicolon, so perhaps
a better separator is in order.  However, I'm at a loss to come up with
such a beast.

>Query info and relative
>references do not mix in practice.

I don't think it is much of a stretch to say:
http://foo.com/cgi-bin/blah.pl?param1=blah

...which returns some html with:

<a href="#top">

...in it.  Isn't this done all of the time?

> In any case, using query info to
>select a resource, as opposed to redirecting to the real resource URL,
>is poor namespace management.

It may be the case that the real resource is stored in a database that must
be accessed via query.  

---
Rob Lanphier               Voice: (206)674-2322         Fax: (206)674-2699
Program Manager-Protocols                         Email: [email-masked]
Progressive Networks-Home of RealAudio            Web: http://www.real.com
For more information on firewalls:       http://www.real.com/firewall.html
For more information on RTSP:               http://www.real.com/prognet/rt

---

From: "Roy T. Fielding" <[email-masked]>
Date: Tue, 15 Jul 1997 12:18:41 -0700

>rules that apply to client-side fragments ("#whatever") would also apply to

Except that they don't.  You can't just invent a new syntax because
it is convenient to do so -- existing implementations must be taken
into account, and for all existing implementations

>     rtsp://foo/db/moviebase?movie=twister:track=audio1

has a query part of "movie=twister:track=audio1" because ":" is not
a reserved character within the query portion of a URL.  Furthermore,
the scheme-independent relative URL resolution algorithm calls for the
query component of the base URL to be stripped off BEFORE it is
used for relative resolution, since that is what current practice does.
It is therefore impossible for us to introduce such a component to the
URL syntax.

>It may be the case that the real resource is stored in a database that must

Then the query should return a redirect to a new URL, or the namespace
should be structured such that it maps into a database query.  There is
no significant difference between the server-side implementations of

    rtsp://foo/db/moviebase?movie=twister:track=audio1
and
    rtsp://foo/db/moviebase/twister/track=audio1

It is merely an issue of how the server manages its namespace.
If you want to use relative forms, you must use the latter syntax.

....Roy