Http – Hypertext transfer protocol – протокол уровня приложений, определяющий обмен данными через запрос/ответ. Собственно это мое фривольное определение для данного понятия. Более подробно о http можно узнать на сайте w3.org , где в простой форме, без приукрашиваний, описаны основные стандарты данного протокола, в частности можно почитать увлекательную статью под названием rfc2616 ( Request for Comments ), где описаны основные определения и параметры для http версии 1.1. Поверьте это увлекательное чтение. Есть и другие документы из этой серии ( rfc ) позволяющие пролить свет на нюансы внутреннего устройства сети интернет. Помню при разработке серьезных проектов, я просто зачитывался этими публикациями. Ну да о чем это я собственно, наверно о том, что последнее время одолели разного типа запросы, с использованием данного протокола. Надо сказать, что запрос по http строится до банального просто, достаточно послать текстовое сообщение на определенный адрес в сети, ну и выдержать формат сообщения в соответствии с ранее указанными спецификациями. И что самое интересное, все приложения, работающие по этому протоколу, действуют до банального одинаково: делают запрос в определенном формате, и получают ответ. Так же работают браузеры, которыми мы пользуемся при просмотре интернет страниц. В запрос разные интернет приложения помещают разные параметры, которые довольно подробно описаны в выше приведенной спецификации. Анализируя заголовок запроса можно понять, откуда этот запрос сделан, и что хочет получить система делающая запрос.

Для примера можно сказать, что в запрос помещается адрес страницы с которой произведен переход ( параметр называется “Referrer” ), и описание основных компонент системы с которой запрос был произведен. Наверно вы уже сталкивались с таким понятием как реферер(“Referrer”) при покупке трафика на бирже, да если этот параметр не указан, то скорее всего это или прямой переход с указанием вашего URL в адресной строке, или был выполнен специально написанной программой, в которой горе программист забыл заполнить это поле для большей достоверности в работе бота. User-Agent – показывает тип броузера и компоненты системы с которой был сделан запрос.

Выглядит это приблизительно так: “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)” , если это поле не заполнено, то программиста делающего бот надо просто расстрелять.
Формируется http запрос просто как текст с переводом строк, выглядит это приблизительно так:

initial line, различная для запроса и ответа
Header1: value1
Header2: value2
Header3: value3


GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org

Или:
GET /path/file.html HTTP/1.0
From: ownru@mail.com
User-Agent: HTTPTool/1.0
[Пустая строка]

Можно наполнить заголовок запроса большим количеством параметров:
GET /dummy.php?name=ownru&p=1000 HTTP/1.1
Host: www.ownru.ru
User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=seo&aq=f&aqi=g10&aql=&oq=&

И для типа POST:

POST /path/script.cgi HTTP/1.0
From: ownru@mail.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

home=ownru&address=ownru

POST /dummy.php HTTP/1.1
Host: www.ownru.ru
User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=seo&aq=f&aqi=g10
Content-Type: application/x-www-form-urlencoded
Content-Length: 39

name=ownru&p=1000

Ответ тоже до безобразия примитивный приблизительно так:

HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354

html
body
.
.
/body
/html

Данный запрос просто вызовет указанную страницу на указанном хосте, при этом поле рефферер и поле юсер-агент останутся незаполненными. Да в спецификации можно прочитать о типах запросов, наиболее распространенные это POST и GET, для простоты будем отличать их основываясь на том, что POST – предполагает передачу данных в теле запроса, а GET – передает параметры в адресной строке.

Собственно к чему это я , наверно я все таки не собирался дать полное описание http протокола и всех возможных вариантов его применения? Ах да я о спаме, который нас окружает, так вот, если в поле рефферер – внести полный URL от поискового запроса, например от Yandex, и послать запрос на ваш сайт, то любая система статистики покажет, что пользователь пришел с Yandex по данному запросу, если в данное поле забить адрес вашего сайта, то система статистики покажет, что посетитель перешел с вашей страницы. И это один из видов рекламы в сети, которой многие судя по моим статам пользуются очень активно, рассчитана она конечно в первую очередь на администраторов, но они тоже люди, хотя и со своими особенностями.

Так же легко можно реализовать запрос к блогу на Word Press так называемый TRACKBACK для получения обратной ссылки.
Один из товарищей по сети атакует мой блог такими запросами, но видно квалификации не хватает, и они получаются кривыми, хочу пожелать товарищу тщательно изучить выше указанную спецификацию, создать свой блог , и отладить свое приложение, чтобы все что оно делает не вызывало сомнений в подлинности.
В общем приложите немного фантазии и труда, и удивитесь как разнообразны сферы применения протокола http.



2 Responses to “Увлекательный http”

  1. Localic Says:

    Побывал на днях в Казани и в Нижнем Новгороде, и очень удивился разбросу цен на услуги интернет провайдеров. Всегда считал, что цены должны быть в принципе одинаковыми в соседних регионах, везде один и тот же увлекательный http, ан нет. Хотелось бы поинтересоваться, из какого Вы региона (обращаюсь как к автору сайта, так и к его читателям), какой у Вас провайдер, ну и стоимость услуг в месяц. Берём только проводной интернет (любой), стоимость интересует при скорости 1 Мегабит/с.
    Заранее спасибо всем, кто откликнется и примет участие в моём скромном исследовании.

  2. admin Says:

    Если комментарий не по теме, то просьба наполнять его ключевыми словами из статьи, тем более это не так уж и сложно сделать при автоматическом постинге. Как вспомнился ответ одного форумчанина: Все мы боты, а вокруг матрица.
    (Еще раз сообщаю , что на блоге ручная модерация, а не по первому успешному посту)
    Наблюдательность и пытливый ум - это то на чем держится прогресс.
    Насчет провайдеров - вопрос на мой взгляд не очень интересный - везде сидят люди и делают все по своему - сравнивать и собирать статистику очень тяжело.
    Например у нас одно время на наш дом эксклюзивными правами обладал один провайдер : скорость была маленькая, денег стоила немеренно. Но пришли конкуренты, и скорость выросла в десять раз а цена упала в два раза. И теперь тестировать любимый http и изучать его внутреннее устройство стало гораздо удобнее.