proposal for capabilities lookup
Ernst Johannes
jernst+lists.danga.com at netmesh.us
Thu Nov 17 12:26:45 PST 2005
So I think what we've established so far is that:
- the capabilities lookup needs to be orthogonal to the content type
- we should use what we can learn from other people who have
addressed similar problems with XML and XML schema, for example.
- we all think that establishing universal filename conventions is
not going to work. The reasons that were brought up are all similar
to the ones listed on http://en.wikipedia.org/wiki/Favicon (look for
"conflicts with the Architecture of the World Wide Web").
We also have the goals:
- we should not introduce new HTTP verbs (too messy, too hard)
- we should stay with common practice where established in similar
domains
- we should not use mechanism that may create caching problems with
intermediate caches outside of our control (or even knowledge)
- we need to minimize the number of HTTP requests, and the
bandwidth consumed
- we need to support users who want to be YADIS-enabled with a non-
cooperative service provider, and service providers who want to YADIS-
enable their users without them necessarily knowing what that is or
having to do anything special to their part of the puzzle (http
server vs. content)
There's also this goal, which I'm not sure we discussed this on this
list, but certainly it has been discussed in person:
if possible, we should allow high-volume consumers (think Yahoo,
Google etc.) to shortcut the protocol for those YADIS identity hosts
where the YADIS identity host has decided on a (local, not universal)
convention and the consumer is aware of the local convention. For
example, if site highvolumebloghost.example.com hosts one zillion
YADIS identifiers, but their "j-meta" information can always be
retrieved from http://highvolumebloghost.example.com/some/very/
specific/j-meta/path, then a high volume consumer of YADIS
identifiers should be able to write special-purpose code just for
this site, and just for the time period that
highvolumebloghost.example.com does not change its mind on its local
proprietary convention. (If the high-volume consumer does not want to
write special-purpose code -- and certainly for everybody else who
isn't a high-volume consumer -- highvolumebloghost.example.com will
still need to support the general-purpose protocol, and YADIS will
only standardize that)
All of this seems to point strongly to a separate URL (or URI, or
IRI, or XRI, ... I will just use the term URL for simplicity from
here) from which the "j-meta" data should be retrieved, rather than
"hiding it" behind the same URL as pretty much all of us on this list
-- me included :-( -- have suggested so far.
So my proposal boils down to something very simple: all we need to
define is how a given YADIS URL can return another URL that points to
its "j-meta" data. We don't even have to request it specifically --
it could always do it, because it's fairly cheap: it's just a single
URL.
[For those of you who remember when "reflection" or "run-time type
identification" was introduced to OO languages like C++: I'm
basically suggesting to add a pointer from the instance to the type
aka j-meta data, just like they did to make that possible]
Because of the two different deployment scenarios -- user wants YADIS
in spite of service provider (that controls web server), and vice
versa -- we need two mechanisms for getting this 'j-meta" URL across:
one on the HTTP protocol level, and one on the content level.
Which, revealingly enough, is very similar to the HTML META http-
equiv tags: "Dear user, if for whatever reason you can't change the
behavior of your web server in spite of the fact that this is really
a matter of HTTP, not HTML, then we grudgingly give you the
workaround to say the stuff you want to say inside an HTML document
using http-equiv".
What remains to define is the field name. Pick any one you like ;-) J-
Meta comes to mind, or better not ;-) I have no problem with "Meta",
you might have different suggestions ... Using X-Meta from here.
So this is how it would work (leaving out any potential, site-
specific shortcuts that are left as an exercise for the reader)
1) User visits Identity Consumer (aka Relying Party) http://
consumer.example.com, enters their YADIS-enabled URL such as http://
yadis.example.net/johnny
2) Consumer performs a regular HTTP GET or HEAD on http://
yadis.example.net/johnny, nothing special
3) YADIS URL http://yadis.example.net/johnny returns the following
HTTP response header:
HTTP/1.1 200 OK
Date: ....
Server: ....
Transfer-Encoding: ...
Content-Type: text/html (or whatever pleases the web server)
X-Meta: http://capabilities.example.biz/walter
(note there is no problem with caching)
4) Identity consumer now performs an HTTP GET on http://
capabilities.example.biz/walter to get the capabilities document
Alternatively:
In step 3, the X-Meta header is not present, but the content type is
text/html. Then:
In step 4, Identity consumer parses HTML document for special tag
inside HTML HEAD -- that could be a link tag, or -- what I'd like
better given the parallels with http-equiv -- looks for
<meta http-equiv="X-Meta" content="http://capabilities.example.biz/
walter" />
in the HTML document and proceeds as before.
Regardless of whether you like my proposal or not (I hope you do ...)
-- are there any requirements that I'm not addressing with this
proposal?
Johannes Ernst
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lid.gif
Type: image/gif
Size: 973 bytes
Desc: not available
Url : http://lists.danga.com/pipermail/yadis/attachments/20051117/de9d83e0/lid.gif
-------------- next part --------------
http://netmesh.info/jernst
More information about the yadis
mailing list