我在浏览一些网站时,突然想到一个问题:它们的url中包含大写字母和小写字母的组合,例如http://www.domain.com/Home/Article
现在,我知道我们应该始终在url中使用小写字母,但不清楚技术原因。我希望从您这位专家那里学习,以澄清为什么在url中使用小写字母。大写url的优缺点是什么。
我在浏览一些网站时,突然想到一个问题:它们的url中包含大写字母和小写字母的组合,例如http://www.domain.com/Home/Article
现在,我知道我们应该始终在url中使用小写字母,但不清楚技术原因。我希望从您这位专家那里学习,以澄清为什么在url中使用小写字母。大写url的优缺点是什么。
域名部分不区分大小写。 GoOgLe.CoM
会起作用。您可以按照自己的意愿添加大写字母,但通常没有这样做的理由,并且可能会影响您的SEO排名,如下面的评论所述。
路径部分大小写敏感或不敏感,具体取决于服务器环境和服务器。通常情况下,Windows机器不区分大小写,而Linux机器区分大小写。这意味着您应该坚持使用小写字母,否则可能会引入一个很难追踪的错误(在开发服务器上不重要的大小写不匹配)。
查询字符串部分按原样提供给服务器。您可以随意使用混合大小写,或者丢弃大小写(toLowerCase(...)
)。这也意味着使用base64编码的键是可行的。但是,您不能指望用户正确地输入它们。
哈希部分(称为“片段标识符”)仅对客户端代码可用,而不对服务器可用。Javascript可以根据喜好区分大小写,浏览器也一样。 url#a
将滚动到ID为a
的元素,但 url#A
不会。
/Home
和/home
都是不同的URL。 - Daniel W.我不得不反对所有已有的智慧,所以可能会被踩,但是:
如果你将所有大小写混合的网址重定向到正确大小写的网址,它可以解决提到的所有问题。因此,这个争论似乎来自传统和偏好。一个URL的目的是拥有一个用户友好的页面表示方式,如果你的URL使用大写更加友好,为什么不用呢?比较一下:
moviesforyoutowatch.com/batman-vii-the-dark-knight-whatevers MoviesForYouToWatch.com/Batman-VII-The-Dark-Knight-Whatevers
我认为混合大小写版本更适合此目的。如果有技术上的原因不能用小写进行比较和重定向,请分享。
我知道你要求技术方面的原因,但从用户体验的角度考虑也是值得考虑的。
假设你有一个包含大写字符的URL,且该URL已经在印刷媒体上分发。当用户尝试在浏览器中输入该URL时,他们可能会被迫匹配该大小写(或者如果你的Web服务器区分大小写,则被迫匹配指定的大小写),这实际上增加了他们的工作量,因为他们必须考虑大小写。毕竟,他们不知道你的服务器是否区分大小写,而且他们可能在过去遇到过来自区分大小写Web服务器的404错误。
如果您的服务器区分大小写并且正在使用混合大小写URL,则可以给用户更多的机会来输入URL。此外,假设您有URL www.example.com/Contact. 如果用户忽略了大小写,使用了错误的大小写,那么他们可能永远无法到达您的内容。
考虑到所有这些问题,请使用小写字母的URL,例如www.example.com/news/articles/freeicecreamforall。在键盘上输入还好,但在移动设备上输入将非常麻烦。
反过来,如果用户想从地址栏中写下URL,他们可能觉得需要匹配大小写,这最终会增加他们的工作量并增加错误的可能性。
总之,请使用小写字母的URL。
关于此问题的安全方面:
实际上,使用大小写混合有一个很好的安全理由。
它会使攻击者感到困惑和阻塞!
在人类交流中,人们很容易因为大小写的使用而感到困惑。
如果标识符、密码或URL包含大小写字母,人类就无法清晰地“说出”这些单词。
这有助于保护站点子部分上提供的数据或密码的安全性,这些数据或密码是作为站点或其数据的“自动访问”部分的一部分提供的。
这类似于不使用JSON。
JSON是“可读文本”,因此JSON只是向所有攻击者(包括窃取您的想法和数据的政府、谷歌等)提供了几乎所有他们需要了解的数据……使用私有定制的非常快速的“二进制协议”来混淆他们,使用您自己的“不可知数据结构”更加安全……但要注意,实际上可能会使您自己或您自己的开发团队感到困惑。
为避免混淆,必须“良好管理”所有安全层和协议。
因此,通过使用完全非传统的系统(即为什么任何人都想要使用“标准安全协议”时,通过一些简单的重量级先前计算它们都可以轻松破解),可以获得来自人类攻击者(和一些机器人)的额外站点和数据安全级别。
只需“盐和哈希”一切-并添加一些额外的定制安全性-这只是常识!
结论:以上所有答案都非常清晰和正确-但您也可以愉快地利用相同的知识来混淆潜在的攻击者。