2010-06-26 21 views
5

Si tengo la URL A, por ejemplo, http://www.example.com/ y otra, por ejemplo, http://www.example.com. ¿Cuál sería la forma más segura de determinar si ambas son iguales, sin consultar la página web y hacer una diferencia?¿Cuál es la forma más segura de determinar si 2 URL son iguales?

EJEMPLOS:

  1. http://www.example.com/ VS http://www.example.com (mencionado anteriormente)
  2. http://www.example.com/aa/../ VS http://www.example.com

EDIT: Aclaraciones: sólo quiero saber si las URL son los mismos en el contexto de siendo equivalente según el estándar RFC 1738.

+2

definir lo "mismo" significa en su contexto –

+0

¿Quieres saber si las direcciones URL o los contenidos son ¿lo mismo? Técnicamente no, pero para la mayoría de los sitios web ambos funcionan. – Gelatin

+0

Solo quiero saber si las URL son las mismas en el contexto de ser equivalentes según el estándar RFC 1738. –

Respuesta

13

En .Net, puede utilizar la clase System.Uri.

let u1 = new Uri ("http://www.google.com/") ;;

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

Let u2 = new Uri ("http://www.google.com") ;;

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

u1.Equals (u2) ;;

Val IT: bool = true

Para la comparación de grano más fino, se puede utilizar el método Uri.Compare. También hay métodos estáticos para tratar con diversas formas de escape y codificación de caracteres en la cadena Uri, que sin duda resultarán útiles cuando se trate el tema a fondo.

+0

¿qué idioma es ese? IronPython, ¿supongo? –

+0

@Thomas Levesque: se parece más a una sesión interactiva F # – dtb

+0

Derecha, F # interactiva ... Estaba flojo y no quería crear un proyecto C# solo para asegurarme de que la respuesta era correcta. Pensé que era lo suficientemente claro e incluso podría ayudar a tener los ojos un poco más acostumbrados a ver F #. – codekaizen

1

Es muy poco lo que puede hacer sin solicitar la URL. Sin embargo, se pueden definir varias heurísticas:

  1. Quitar barra final
  2. Considere .htm y .html la misma
  3. Supongamos /base/ y /base/index.html son los mismos
  4. parámetros de cadena Quitar consulta (tal vez, tal vez no, depende de sus necesidades)
  5. Considere url.com y www.url.com lo mismo.

Todo depende de lo que signifique exactamente por las URL que son las "mismas".

+0

También hay problemas con los nombres de host y más, como www.example.com frente a example.com, o mayúsculas y minúsculas (que en Windows no importa) pero en otras plataformas son diferentes), documentos predeterminados, barra diagonal, etc. Así que mi respuesta sería, realmente depende de lo que "igual" significa, y si su preocupación es el contenido, entonces debe solicitarlo. si quiere encontrar duplicados, IIS SEO Toolkit puede ayudar: http://www.iis.net/download/SEOToolkit –

+3

Ninguna de estas heurísticas es correcta. A menudo pueden ser ciertos, pero en general los diferentes componentes de la ruta significan diferentes páginas web. –

+0

@George - una vez más, es imperativo definir exactamente qué significa "mismas" URL. Por supuesto, en diferentes casos estas heurísticas podrían no ser útiles. –

0

Hay pocas cosas que añadir a Yuval A responde:

  • www.google.com y http://www.google.com puntos de mayo a la misma diana
  • puntos www.google.com y google.com a la misma página (pero se implementa mediante redirección)
  • La URL puede estar codificada (consulte HttpUtility.métodos UrlEncode de/recepción)
1

Para el beneficio de aquellos de ustedes que no saben F #, he aquí una aplicación de consola de C# rápido y sucio, pero completo que muestra el uso de la clase Uri decir si dos URLs son los mismo. Cuando se ejecuta este código, verá que hay dos líneas: "true", seguido de "falsa":

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); 
     } 
    } 
} 
Cuestiones relacionadas