如何标准化URL?

时间:2015-07-30 06:04:23

标签: url browser url-shortener

我正在构建一个小的URL Shortener服务,其中一个要求是该工具必须能够识别明确缩短的URL以再次提供哈希值,而不是生成新的哈希值。

为了有效地做到这一点,我必须将任何给定的URL分解为小部分,并以在整个系统中统一的方式存储它们。

例如:

http://subdomain.domain.com:8081/example.php?query=true#hash

可以翻译成小部分:

{
    protocol: "http:",
    hostname: "domain.com",
    subdomain: "subdomain",
    port: "8081",
    pathname: "/example.php",
    query: "query=true",
    hash: "#hash"
}

有了这些部分,我再一次将它们放在一起制作一个URL。

现在想象一下比较时的情况(参考文献#1):

http://www.iana.org/domains/reserved/

和(参考#2):

http:////www.iana.org//domains//reserved

甚至(参考#3):

http://www.iana.org//domains\\/reserved

字符串完全不同,但是当它们打入时它们都返回相同的页面(我相信浏览器会更正它)。为了将它们检测为相同的URL,我添加了另一个简单的字符串替换层以便标准化(或者是正确的动词):

  1. 使用protocol + "//" + subdomain + hostname + ":" + portname标准化网址的第一部分。
  2. /中的单个斜杠/替换所有多个斜杠pathname
  3. 添加query + hash以完成网址。
  4. 我的问题

    1. 我应该进行更换吗(步骤2)?我担心非标准浏览器的行为可能会在URL(例如参考文献#2和参考文献#3中的URL)中打出时返回不同的地址(或错误)。
    2. 人们可以有意或无意地为浏览器仍能正确解析的相同网址输入不同的字符串?总的来说,我需要检测这些情况,以尽量减少两次获得相同URL的机会。

0 个答案:

没有答案