确定2个URL是否相同的最安全的方法是什么?

时间:2010-06-26 17:42:41

标签: c# url c#-3.0

如果我有网址A说http://www.example.com/而另一个说http://www.example.com。什么是最安全的方法来确定两者是否相同,而不查询网页并做差异?

实施例

  1. http://www.example.com/ VS http://www.example.com(上文提到)
  2. http://www.example.com/aa/../ VS http://www.example.com
  3. 编辑: 说明:根据RFC 1738标准,只想知道URL是否相同。

4 个答案:

答案 0 :(得分:13)

在.Net中,您可以使用System.Uri类。

  

让u1 =新的Uri(“http://www.google.com/”);;

     

val u1:Uri = http://www.google.com/

     

让u2 =新的Uri(“http://www.google.com”);;

     

val u2:Uri = http://www.google.com/

     

u1.Equals(U2);;

     

val it:bool = true

要进行更细粒度的比较,您可以使用Uri.Compare方法。还有一些静态方法可以处理Uri字符串中各种形式的字符转义和编码,这无疑在彻底处理主题时非常有用。

答案 1 :(得分:1)

如果没有请求网址,你几乎无能为力。但您可以定义几种启发式方法:

  1. 删除尾部斜杠
  2. 考虑.htm.html相同的
  3. 假设/base//base/index.html相同
  4. 删除查询字符串参数(可能,可能不是,取决于您的需要)
  5. 考虑url.comwww.url.com相同。
  6. 这完全取决于“相同”的URL究竟是什么意思。

答案 2 :(得分:1)

为了那些不了解F#的人的利益,这是一个快速而肮脏但完整的C#控制台应用程序,它演示了如何使用Uri类来判断两个URL是否相同。运行此代码时,您应该看到两行:“true”,后跟“false”:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsSameUrl("http://stackoverflow.com/", "http://stackoverflow.com").ToString());
            Console.WriteLine(IsSameUrl("http://stackoverflow.com/", "http://codinghorror.com").ToString());
            Console.ReadKey();
        }

        static bool IsSameUrl(string url1, string url2)
        {
            Uri u1 = new Uri(url1);
            Uri u2 = new Uri(url2);
            return u1.Equals(u2);
        }
    }
}

答案 3 :(得分:0)

向Yuval A答案添加的内容很少:

  • www.google.com和http://www.google.com可能指向同一目标
  • www.google.com和google.com指向同一页面(但通过重定向实施)
  • 可能会对Url进行编码(请参阅HttpUtility.UrlEncode / Decode方法)