Re: [apps-discuss] Scope of RFC3986 and successor - what is a URI?

<> Sun, 18 January 2015 01:49 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 324991ACE2A for <>; Sat, 17 Jan 2015 17:49:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.018
X-Spam-Status: No, score=-1.018 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_FONT_FACE_BAD=0.981, HTML_MESSAGE=0.001, SPF_PASS=-0.001] autolearn=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id PrehUSPG72FC for <>; Sat, 17 Jan 2015 17:49:24 -0800 (PST)
Received: from ( [IPv6:2607:f8b0:400d:c04::22c]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 60C7C1ACD96 for <>; Sat, 17 Jan 2015 17:49:24 -0800 (PST)
Received: by with SMTP id l89so12452718qgf.3 for <>; Sat, 17 Jan 2015 17:49:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=message-id:mime-version:from:to:cc:subject:importance:date :in-reply-to:references:content-type; bh=ztEYLRggdzPOihYx+rCdcXwvGTlKB6iO098ZVmDYL5M=; b=t2WWP5arVnkdi6s1SgPGteb8xZ+A0r6z3RIuHnswBG0rIYfShB3LeWdcBvWiXjpm7g T/LEjP1SV3Udo3K+vhiKO4JOonEsZR3rbB7xYMT/8qDl2bcLxB819Vu4adm5iqsjD5DH 4n/tAR3LOM8ruPbmBxtRZi0lOU1JKjKS8qb0YE0MkRwhE9ETZDu+Llp+GCth+WVVGCqW O0aN6ioI5Clg4WFQDCKi3viCMiJnIJAvOjEP58eh2pgdC/sbJyf7iUQC7Xm/eDYQ5Lz0 DzulEvkIKIBOJfSn9Zuacl0EDTF4R/oXcX2xVrUkONhrZEGK2NTtHDz7yqZmqZO1V31N jNUw==
X-Received: by with SMTP id s111mr35583566qge.44.1421545763604; Sat, 17 Jan 2015 17:49:23 -0800 (PST)
Received: from Pecan ( []) by with ESMTPSA id l10sm4108263qay.22.2015. (version=TLSv1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 17 Jan 2015 17:49:22 -0800 (PST)
Message-ID: <>
MIME-Version: 1.0
To: Sam Ruby <>, mike amundsen <>
Importance: Normal
Date: Sun, 18 Jan 2015 01:08:59 +0000
In-Reply-To: <>
References: <> <> <> <012001d02d91$6ec42300$> <> <018e01d02dc6$1d03b0a0$> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>, <>
Content-Type: multipart/alternative; boundary="_6256A262-4134-4E04-86E7-F3E49BFB5969_"
Archived-At: <>
Cc: IETF Apps Discuss <>
Subject: Re: [apps-discuss] Scope of RFC3986 and successor - what is a URI?
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: General discussion of application-layer protocols <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sun, 18 Jan 2015 01:49:26 -0000

From: Sam Ruby

> I have trouble with the words "existing *spec-compliant* implementations".

> Either that term is meaningless, or I have yet to find one.

>I've taken a look at a lot of libraries that produce and consume URIs 
>(some call them URLs, but lets not worry about that for the moment).  I 
>have yet to find one that is spec compliant.

Again I can only speak for the tests that you are doing on the csharp implementation, but the test results are far from conclusive when it comes to comparing against RFC 3986.  From looking at your makefile, I’m making a guess that you are using mono to build the csharp code.  The System.Uri class is actually part of the .net framework.  Currently there are multiple versions/editions of the .net framework in addition to the mono version.  Even within the Microsoft .net framework there are configuration settings that control URI parsing behavior

You can turn on IRI compliant parsing with a global setting.  The default of this global setting was changed from false to true on the move from .Net 4.0 to 4.5.

You can also configure all kinds of other behavior related to URI parsing

My reason for bringing up these details is because I believe that declaring RFC 3986 invalid because implementations don't match its behavior is self-defeating.  IMHO, a spec should be a goal that implementations aim for, not a reflection of the behavior of an implementation that currently has the biggest market share.

Having said all this, I will try and run your tests on various versions of Microsoft’s .net framework and see how much the results deviate.  I did try running your C# tests, but they are based on a JSON file that I believe gets created by some javascript that I didn’t find.  My js skills are less than stellar!