Project

General

Profile

Actions

Feature #14035

closed

URI module always serializes to the minimal form insted of the traditional one

Added by ioggstream (Roberto Polli) about 7 years ago. Updated over 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:83423]

Description

Reproduce

execute URI("file:///etc/hosts").to_s

I expect

I wish

  • URI to preserve the minimal/traditional form.

URI("file:///etc/hosts").to_s == "file:///etc/hosts"
URI("file:/etc/hosts").to_s == "file:/etc/hosts"

Instead

  • URI("file:///etc/hosts").to_s == "file:/etc/hosts"

  • URI("file:///etc/hosts").host == nil

Proposal for Ruby 2.4

Adopting the convention of an "empty host" instead of no authority when the passed string has the traditional form.

  • file schema to have a blank/empty "" host

suggested in rfc3986 will fix the issue.

   If the URI scheme defines a default for host, then that default
   applies when the host subcomponent is undefined or when the
   registered name is empty (zero length).  For example, the "file" URI
   scheme is defined so that no authority, an empty host, and
   "localhost" all mean the end-user's machine, whereas the "http"
   scheme considers a missing authority or empty host invalid.

Related issues 1 (1 open0 closed)

Related to Ruby master - Feature #15861: Correctly parse `file:c:/path/to/file` URIsOpenActions
Actions #1

Updated by ioggstream (Roberto Polli) about 7 years ago

  • Subject changed from URI module file representation does not conform to the standard to URI module file representation uses the minimal form instead of the traditional one.

Updated by phluid61 (Matthew Kerwin) about 7 years ago

The spec for file URIs is RFC8089, which allows for file URIs with no authority part (e.g. 'file:/foo').

Neither it nor RFC3986 make any claims about canonical representation of URIs, much as I may have liked it to.

Also, have a look at the 'file-uri' gem.

Actions #3

Updated by ioggstream (Roberto Polli) about 7 years ago

  • Tracker changed from Bug to Feature
  • Subject changed from URI module file representation uses the minimal form instead of the traditional one. to URI module always serializes to the minimal form insted of the traditional one
  • Description updated (diff)
  • ruby -v deleted (ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux])
  • Backport deleted (2.3: UNKNOWN, 2.4: UNKNOWN)

Updated by ioggstream (Roberto Polli) about 7 years ago

Hi Matthew, and thanks for your time!

phluid61 (Matthew Kerwin) wrote:

The spec for file URIs is RFC8089, which allows for file URIs with no authority part (e.g. 'file:/foo').

Ok.

Neither it nor RFC3986 make any claims about canonical representation of URIs, much as I may have liked it to.

I read here https://tools.ietf.org/html/rfc8089#appendix-B reports that there is a traditional form though.
Clearly traditional != canonical ;)

Checked gem, thx++

Actions #5

Updated by naruse (Yui NARUSE) over 6 years ago

  • Status changed from Open to Closed

Applied in changeset trunk|r62767.


Introduce URI::File to handle file URI scheme

Actions #6

Updated by naruse (Yui NARUSE) almost 4 years ago

  • Related to Feature #15861: Correctly parse `file:c:/path/to/file` URIs added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0