Проверка дублирующегося содержимого без выполнения GET

#html #url #duplicate-data

#HTML #url #duplicate-данные

Вопрос:

Одна из основных целей нормализации URL-адресов — избегать GET запросов на разные URL-адреса, которые приводят к точно такому же результату.

Теперь я знаю, что вы можете проверить наличие canonical tag и даже сравнить HTML-адреса двух URL, чтобы увидеть, совпадают ли они, однако для этого вам придется дважды загрузить один и тот же ресурс, обойдя пункт, о котором я говорил ранее.

Есть ли способ проверить наличие дублированного содержимого, выполняя только запрос HEAD? Если нет, есть ли способ загрузить только <head> раздел веб-страницы без загрузки всего документа?

Я могу придумать решения для последнего, я просто не хочу знать, есть ли прямое.

Комментарии:

1. Просматривая статью в Википедии , мне кажется, что вы описываете проблему, отличную от той, которая возникает при нормализации URL. Веб-сканер нормализует URL-адреса, чтобы убедиться, что он использует каноническую версию; похоже, вы описываете проблему, при которой два разных, но уже нормализованных URL-адреса на одном веб-сайте могут выдавать одинаковый результирующий результат. Я правильно характеризую вашу проблему?

2. @Роберт Харви — Правильно. Нормализация URL-адресов обычно является способом минимизации дублирующегося содержимого. Я ищу способ избежать выполнения двух запросов GET, чтобы определить, имеют ли два URL-адреса одинаковый HTML, сделать URL-адреса нормализованными или нет. Таким образом, нормализация URL в веб-сканерах сама по себе не потребуется. Я думал о хешировании ответа на запрос HEAD, насколько это надежно?

3. Нормализация URL-адресов не сводит к минимуму дублирующееся содержимое; она сводит к минимуму количество возможных способов, которыми один и тот же URL-адрес может быть представлен веб-сканеру, чтобы ему не приходилось повторно обходить одну и ту же страницу. Наличие двух разных нормализованных URL-адресов, указывающих на одну и ту же страницу, — это другая проблема.

4. @Robert Harvey Правильно, однако выполнение двух запросов HEAD (<1 кб) намного лучше, чем выполнение двух запросов GET (HEAD HTML — > 1 кб).

5. Ну, в соответствии с этим, вы можете выполнить запрос HEAD вместо запроса GET, и он должен возвращать только заголовок страницы. Теперь все, что вам нужно сделать, это поместить некоторый уникальный элемент ID в заголовок каждой страницы (например, GUID или идентификационный номер страницы), а затем вы можете просто сверить идентификатор с вашим другим запросом HEAD на дублирование.

Ответ №1:

Согласно документации MSDN, решение вашего вопроса заключается в следующем

 Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)
Console.WriteLine(ControlChars.Lf   ControlChars.Cr   "The following headers were received in the response")
Dim i As Integer
While i < myHttpWebResponse.Headers.Count
    Console.WriteLine(ControlChars.Cr   "Header Name:{0}, Value :{1}", myHttpWebResponse.Headers.Keys(i), myHttpWebResponse.Headers(i))
    i = i   1
End While
myHttpWebResponse.Close()
  

Позвольте мне объяснить этот код: В первой строке создается HttpWebRequest с указанным URL, а во второй строке и третьей строке отображаются все заголовки, присутствующие в ответе, полученном из URI, и с четвертой по восьмую строки — свойство Headers является WebHeaderCollection. Используйте его свойства для обхода коллекции и отображения каждого заголовка и десятой части, чтобы закрыть запрос, и если вам нужна только начальная часть веб-страницы, то класс PHP свободно доступен по адресуhttp://www.phpclasses.org/package/4033-PHP-Extract-HTML-contained-in-tags-from-a-Web-page.html