Re: #295: Applying original fragment to "plain" redirected URI (also #43)

On 2012-01-04 11:27, "Martin J. Dürst" wrote:
> Hello Julian, others,
>
> On 2012/01/03 23:43, Julian Reschke wrote:
>> On 2011-12-30 18:51, Julian Reschke wrote:
>>> ...
>>> Indeed; see my tests at
>>> <http://greenbytes.de/tech/tc/httpredirects/#l-fragments> (note that
>>> Safari appears to have funny issues filling the iframes; but navigating
>>> to the linked resource gets you proper results).
>>> ...
>>
>> I just realized that the rule we would need to describe *almost* is the
>> one define in the URI spec
>> (<http://greenbytes.de/tech/webdav/rfc3986.html#rfc.section.5.2>) as
>> "relative resolution":
>
>> "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")?
>
> I'm not at all sure that this description is correct. It would mean that
> I can have something like:
> Request URI: http://1.example.org/path1/file1.ext
> Redirect URI: http://2.example.org#frag2
>
> and the result would be:
> http://2.example.org/path1/file1.ext#frag2
> ...

I think that's incorrect.

This should be resolved as per:

    if defined(R.scheme) then
       T.scheme    = R.scheme;
       T.authority = R.authority;
       T.path      = remove_dot_segments(R.path);
       T.query     = R.query;
    else
       (left out)
    endif;

    T.fragment = R.fragment;

thus to

    http://2.example.org#frag2

Best regards, Julian

Received on Wednesday, 4 January 2012 11:09:33 UTC