繁体   English   中英

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

[英]What's the safest way to determine if 2 URLs are the same?

如果我有URL 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

编辑:澄清:只是想根据RFC 1738标准知道URL在等效的上下文中是否相同。

在.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字符串中各种形式的字符转义和编码,这无疑在彻底处理主题时非常有用。

没有请求URL,你几乎无能为力。 但您可以定义几个启发式方法:

  1. 删除尾部斜杠
  2. 考虑.htm.html是一样的
  3. 假设/base//base/ /base/index.html是相同的
  4. 删除查询字符串参数(可能,可能不是,取决于您的需要)
  5. 考虑url.comwww.url.com相同。

这完全取决于“相同”的URL究竟是什么意思。

为了让那些不了解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);
        }
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM