- From: Brian Smith <brian@briansmith.org>
- Date: Tue, 29 Apr 2008 07:44:08 -0700
- To: "'Phil Archer'" <parcher@icra.org>
- Cc: "'Mark Nottingham'" <mnot@mnot.net>, "'HTTP Working Group'" <ietf-http-wg@w3.org>
[Removed Atom-Syntax]
Phil Archer wrote:
> I am sympathetic to your proposal for foo-Links - it seems clear and
> your experiments add weight to it. However, it seems to lose out on
> flexibility. With Link, anyone can create a new relationship type by
> providing an absolute URI, it's only relative ones that are
> tied to the IANA namespace.
>
> Putting people in a tight corner will lead them to ignore some of the
> rules and I fear you'll soon see 'links' of the type
>
> dunno_about_registration-Links:
>
> so that clashes become rather more likely.
The example in the Link header proposal was:
Link: </foo>; rel="http://example.com/profile1/foo"
How would we convert this to a "foo-Link"? How about just dropping the
"http://" as noise, and then replacing all the characters that are illegal
in HTTP header field names with "-"?:
example.com-profile-foo: /foo
I think that this is a nice compromise between the ease of processing,
readability, while making collisions extremely unlikely. The worldwide Java
programming community has used a very similar naming convention and it has
worked out very well over the last ten years.
Regards,
Brian
>
> --
> Phil Archer
> POWDER WG
>
>
> Brian Smith wrote:
> > [CC'd to ietf-http-wg. I think it is better to continue the
> conversation
> > over there as most of my comments are not specific to Atom.]
> >
> > Mark Nottingham wrote:
> >> The draft does not advocate removing links from Atom
> >> documents to put them in headers; rather, the common
> >> use case is repeating them in headers, so that they
> >> can be easily discovered and processed.
> >
> > With HTML, I've never seen the Link header used that way;
> it has always been
> > used to add new links to the document (usually style sheets
> that vary
> > depending on the UA).
> >
> > When processing Atom documents, we are usually more interested in
> > atom:title, atom:content/@src (if any), and
> atom:content/@type. In AtomPub
> > we also often want atom:link/@rel='edit' and
> atom:link/@rel='edit-media'.
> > Since the Link header can only store the atom:link
> elements, we are almost
> > always going to have to parse the document anyway. If
> parsing Atom (or HTML)
> > is problematic for the software application then the
> application shouldn't
> > have chosen to store everything in Atom (or HTML) documents. :)
> >
> >>> For all those reasons, I actually think it makes a lot more
> >>> sense for the Link header registry to be mutually exclusive
> >>> with the HTML and Atom registry, instead of attempting to
> >>> merge them all together.
> >> You're the first person to suggest that. I think we can get
> >> to a place where there's alignment between the specs without
> >> abusing the semantics of existing relations. It's certainly
> >> worth trying...
> >
> > It seems like a lot of effort just to (re-)define all the
> link relations in
> > a format-agnostic way without being overly vague. It is
> probably even more
> > work to convince everybody (especially the HTML WG) to
> agree to the result.
> > I think it would be nice if the same link relation
> identifiers meant the
> > same thing in Atom as they do in HTML. However, for most of
> the existing
> > registrations, I don't see the advantage to also making
> them available in
> > the HTTP message header.
> >
> > Last Friday I implemented support for the Link header in a
> simple AtomPub
> > application. Now I will take an even stronger stance: its
> use should not be
> > encouraged at all. It is much simpler to process hyperlinks
> that use the
> > "Relation: URI" syntax like Location and Content-Location
> than it is to
> > process hyperlinks that use the Link header. For example,
> writing Python
> > middleware or Apache mod_rewrite/mod_headers rules to
> filter/add/remove
> > links is much harder using the Link header than when using the
> > Location-header approach:
> >
> > 1. There is too much flexibility in the syntax of the "rel"
> parameter. For
> > example, the following all mean the same thing:
> > rel=edit
> > rel="edit"
> > rel="\e\d\i\t"
> > rel="http://www.iana.org/assignments/link-relations.html#edit"
> > ....
> > If you want to be able to catch all variations, then you
> have to write a
> > pretty nasty regular expression.
> >
> > 2. The Link header mixes unrelated information into the
> same header field.
> > Consequently, in order to process specific types of links,
> you have to parse
> > the Link header field into parts, process the parts that
> you are interested
> > in, and put it all back together.
> >
> > 3. The "rev" mechanism makes processing unnecessarily
> difficult. You have to
> > be careful to note whenever rev=A means the same thing of
> rel=B when you are
> > attempting to process the header.
> >
> > I think a better alternative to a single "Link" header is
> to define a
> > standard for multiple Link-like headers:
> >
> > [Relation]-Links: #(URI-Reference LWS *(; param=value LWS))
> >
> > For example, an "edit" link would be:
> >
> > Edit-Links: http://foo.org
> >
> > This could be done by changing the registration rules for
> HTTP headers so
> > that header fields with a "-Links" suffix must have the
> above syntax, with
> > the definitions of the "media", "type", and "title"
> parameters to be the
> > fixed to be the same as in HTML 4 (or 5) and Atom 1.0. Each
> link header
> > would have to define the processing rules for when multiple
> links are
> > provided, and applications must be prepared to handle
> multiple links of the
> > same type, even when they are not expected (that is why I
> chose "-Links"
> > instead of "-Link").
> >
> > Try to write a mod_headers rule or Python WSGI middleware
> that filters out
> > all the links with a particular type. Using the "-Links"
> header syntax, it
> > is just "del environ[HTTP_RELATION_NAME_LINKS]" in Python and "unset
> > RELATION-NAME-LINKS" in mod_headers. The Link header
> version requires a some
> > tricky parsing in Python. I think it is actually impossible
> to process the
> > Link header correctly using Apache's mod_headers.
> >
> > I think the "-Links" header idea allows for uniform syntax
> (like the Link
> > header) while still being extremely easy to process.
> >
> > Thoughts?
> >
> > - Brian
> >
> >
> >
> >
>
>
>
Received on Tuesday, 29 April 2008 14:44:54 UTC