- From: Julian Reschke <julian.reschke@gmx.de>
- Date: Thu, 05 Jan 2012 21:31:39 +0100
- To: Larry Masinter <masinter@adobe.com>
- CC: Mark Nottingham <mnot@mnot.net>, httpbis Group <ietf-http-wg@w3.org>
On 2012-01-04 05:57, Larry Masinter wrote:
> ...
>
> "Almost", because it doesn't use Base.fragment when R.frament is undefined.
>
> a) Should we try describe the algorithm based on RFC 3986 ("do relative resolution as defined by ..., then, if the result doesn't have a fragment, add the one from the Base URI")?
> b) Is this potentially an erratum for RFC 3986?
>
> a) sounds good.
> b) I'd call it an "update" rather than an erratum.
OK, here's an attempt to describe this:
Appendix A. Base Fragment Aware Relative Resolution
Section 5.2 of [RFC3986] defines the Relative Resolution of a URI
reference against a Base URI. That algorithm however does not take a
fragment identifier on the Base URI into account.
However in some cases, as when following a redirect from a URI "Base"
based on a Location header field containing the URI reference "R", it
can be necessary to preserve a fragment identifier present on "Base".
The algorithm described below does this:
Given a URI reference "R" and a base URI "Base", to transform R into
its target URI "T":
(1) Pre-parse the Base URI as defined in Section 5.2.1 of [RFC3986].
(2) Transform references as defined in Section 5.2.2 of [RFC3986].
If the T.fragment is undefined and Base.fragment is defined, then set
T.fragment to Base.fragment:
if defined(Base.fragment) and not(defined(T.fragment)) then
T.fragment = Base.fragment;
endif;
(3) Merge paths as defined in Section 5.2.3 of [RFC3986].
(4) Remove dot segments as defined in Section 5.2.4 of [RFC3986].
(5) Finally, recompose the components as defined in Section 5.3 of
[RFC3986].
A.1. Examples
Starting with a Base URI of "http://host/path1#f1":
+-----------+------------------------+------------------------------+
| R | T (after RFC 3986 | T (after Base Fragment Aware |
| | Relative Resolution) | Relative Resolution) |
+-----------+------------------------+------------------------------+
| /path2 | http://host/path2 | http://host/path2#f1 |
| /path2#f2 | http://host/path2#f2 | http://host/path2#f2 |
+-----------+------------------------+------------------------------+
(this could be an HTTPbis appendix or a standalone document if it's
needed elsewhere)
Best regards, Julian
Received on Thursday, 5 January 2012 20:32:11 UTC