对于REST API,URL是否不区分大小写?

时间:2017-02-21 18:36:03

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

我正在阅读W3C URL Specification,我注意到没有明确提及此事。

实验

所以我在curl尝试的是

www.google.com

然后

www.GOOGLE.com

并且这些返回了相同的文档。所以我想也许谷歌拥有其域名的所有变种,所以我尝试了其他网站,我得到了混合的结果。

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

将此应用于REST API设计

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

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

根据以前的经验,MYSELF的情况无关紧要。但是如果我想要对标识符进行严格的验证呢?

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

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

3 个答案:

答案 0 :(得分:1)

域名不区分大小写。您不需要购买每个变体,因为获取域名可以为您提供各种变体。

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

答案 1 :(得分:1)

常规URI语法

在常规URI语法中(由RFC 3986定义,当前为Internet Standard for URIs),只有两个组件不区分大小写:

  • Scheme

      

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

  • Host

      

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

百分比编码三元组中的字母(即a - fA - 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 :(得分:0)

根据W3规范 -

  

一般来说,网址区分大小写(机器除外)   名)。在没有案例的情况下,可能会有网址或部分网址   问题,但识别这些可能并不容易。用户应该永远   认为URL区分大小写。

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