Что состоит в том, чтобы определить самый безопасный путь, являются ли 2 URL тем же?

Если у меня есть Мнение URL 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

Править: Разъяснения: Просто хочу знать, являются ли URL тем же в контексте того, чтобы быть эквивалентным согласно стандарту RFC 1738.

5
задан Hao Wooi Lim 26 June 2010 в 17:49
поделиться

4 ответа

В .Net вы можете использовать класс 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

Для более детального сравнения вы можете использовать метод Uri.Compare . Существуют также статические методы для работы с различными формами экранирования и кодирования символов в строке Uri, которые, несомненно, окажутся полезными при тщательном рассмотрении темы.

13
ответ дан 18 December 2019 в 11:53
поделиться

Без запроса URL-адреса мало что можно сделать. Но вы можете определить несколько эвристик:

  1. Удалить завершающие слэши
  2. Рассмотрим .htm и .html то же самое
  3. Предположим / base / и /base/index.html одинаковы
  4. Удалить параметры строки запроса (возможно, а может и нет, зависит от ваших потребностей)
  5. Рассмотрим url.com и www.url.com то же самое.

Все очень зависит от того, что именно вы подразумеваете под «одинаковыми» URL.

1
ответ дан 18 December 2019 в 11:53
поделиться

Для тех из вас, кто не знает F #, вот быстрое и грязное, но законченное консольное приложение на C #, которое демонстрирует использование класса Uri, чтобы определить, совпадают ли два URL-адреса. Когда вы запустите этот код, вы должны увидеть две строки: «истина», за которой следует «ложь»:

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);
        }
    }
}
1
ответ дан 18 December 2019 в 11:53
поделиться

Есть несколько вещей, которые можно добавить к ответам Yuval A:

  • www.google.com и http://www.google.com могут указывать на одну и ту же цель
  • www.google.com и google.com указывают на одну и ту же страницу (но это реализовано путем перенаправления)
  • Url может быть закодирован (см. методы HttpUtility. UrlEncode / Decode методы)
0
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: