【问题标题】:For REST APIs, are URLs meant to be case insensitive?对于 REST API,URL 是否意味着不区分大小写?
【发布时间】:2017-07-11 13:06:42
【问题描述】:

我正在阅读W3C URL Specification,我注意到没有明确提及这一点。

实验

所以我在curl 中尝试的是

www.google.com

然后

www.GOOGLE.com

这些返回相同的文档。所以我想也许谷歌拥有其域名的所有变体,所以我尝试了其他网站,结果好坏参半。

所以我在 URL 规范中混合了大小写,它似乎允许混合大小写。

将此应用于 REST API 设计

因此,当将此应用于 REST API 设计时,有时我们会使用标识符的概念从服务器返回特定资源。例如

在https://localhost:8080/contacts/MYSELF 中,MYSELF 是典型的标识符

根据之前的经验,MYSELF 的情况应该无关紧要。但是,如果我想对标识符进行严格验证怎么办?

当然,您可以违反规范并在应用程序中执行此操作;但是在这种情况下应该做些什么呢?

回到主题。 URL 是否不区分大小写?

【问题讨论】:

    标签: rest amazon-web-services web w3c api-design


    【解决方案1】:

    通用 URI 语法

    在一般 URI 语法中(由 RFC 3986 定义,目前是 Internet Standard for URIs),只有 两个组件不区分大小写:

    • Scheme:

      […] 方案不区分大小写 […]

    • Host:

      宿主子组件不区分大小写。

    百分比编码三元组中的字母(即a-f、A-F)也不区分大小写。

    其他所有内容都区分大小写。

    但是,URI schemes 可以为其 URI 覆盖此内容(请参阅 Case Normalization)。

    HTTP(S) URI

    对于 HTTP(S) URI,规范不会使任何其他组件不区分大小写(restates 表示方案和主机不区分大小写)。

    这意味着以下 HTTP URI 是等效的:

    http://example.com/foo
    HTTP://example.com/foo
    http://EXAMPLE.com/foo
    http://example.COM/foo
    HTTP://EXAMPLE.COM/foo
    htTp://exAMPlE.cOm/foo
    

    (最佳做法是将方案和主机标准化为小写。)

    这些不等价:

    http://example.com/foo?bar#baz
    http://example.com/fOo?bar#baz
    http://example.com/foo?bAr#baz
    http://example.com/foo?bar#bAz
    http://example.com/FOO?BAR#BAZ
    

    【讨论】:

      【解决方案2】:

      域不区分大小写。您不需要购买所有变体,因为获得域名会为您提供所有变体。

      没有规范说明 url 的“路径”部分必须是特定情况。路径不不区分大小写,因此访问同一域上的/foo 和/FOO可能产生不同的资源。

      【讨论】:

        【解决方案3】:

        根据 W3 规范 -

        URL 通常区分大小写(机器除外 名称)。可能有 URL 或 URL 的一部分,其中不区分大小写 很重要,但识别这些可能并不容易。用户应始终 请考虑 URL 区分大小写。

        来源:-https://www.w3.org/TR/WD-html40-970708/htmlweb.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-12
          • 2014-08-15
          • 1970-01-01
          • 1970-01-01
          • 2019-01-27
          • 2010-09-07
          • 2013-03-16
          相关资源
          最近更新 更多