Основы HTTP.

HTTP – протокол более высокого уровня, он является протоколом для WWW и относительно прост.

HTTP построен на основе ТСР. Он работает следующим образом: сервер ожидает (listens) запросы на порт 80; клиент (обычно браузер) соединяется (connects) с сервером, узнав его IP-адрес у сервера имен. Используя собственный номер порта, клиент устанавливает с сервером двустороннее TCP-соединение, после чего посылает ему запрос (request). Например:

 

GET/customers/newproducts.html HTTP/1.0

 

Сервер определяет, что запрос отностится к самому популярному типу GET, и решает, что клиенту нужен файл newproducts.html, находящийся в северном каталоге /customers, который может совпадать или не совпадать с каталогом /customers на жестком диске сервера. Вот заголовки запросов (request headers), которые в основном описывают возможности клиента:

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/x-jg, */*

Accept-Language: en

UA-pixels: 1024x768

UA-color: color8

UA-OS: Windows NT

UA-CPU: x86

User-Agent: Mozilla/2.0 (compatible; MSIE 3.0; AK; Windows NT)

Host: www.slowsoft.com

Connection: Keep-Alive

If-Modified-Since: Wed, 26 Mar 2003 20:23:04 GMT

(пустая строка)

 

Заголовок If-Modified-Since сообщает серверу, что тот должен передать файл newproducts.html, если он был изменен после 26 марта 2003 года. Это подразумевает, что у браузера в кэше есть копия этого файла, датированная этим числом. Пустая строка в конце запроса критически важна – это единственный способ указать серверу, что надо закончить прием и начать передачу, поскольку ТСР-соединение остается открытым.

Теперь сервер начинает действовать. Он посылает newproducts.html, но сначала передает ОК-ответ:

 

HTTP/1.0 200 OK

 

За которым сразу следуют строки заголовка ответа (response header):

Server: Microsoft-IIS/2.0

Date: Thu, 03 Mar 2003 17:33:12 GMT

Content-Type: text/html

Accept-Ranges: bytes

Last-Modified: Wed, Mar 26 2003 20:23:04 GMT

Content-Length: 407

(пустая строка)

Содержимое newproducts.html следует сразу за пустой строкой:

<html>

<head><title>SlowSoft’s New Products</title></head>

<body><body background=”/images/clouds.jpg”>

<h1>< center >Welcome to SlowSoft’s New Products List

</center></h1><p>

Unfortunately, budget constraints have prevented SlowSoft from introducing any new products this year. We suggest you keep enjoying the old products.<p>

<a href=”default.htm”> SlowSoft’s Home Page</a><p>

</body>

<html>

Вы видите здесь элементарный код языка разметки гипертекста (HyperText Markup Language, HTML); тэги (tags) HTML содержатся в угловых скобках и часто для каждого начального тэга есть конечный (с символом '/').

Для сервера клиенты – это просто ІР-адреса и номера портов. Для разных запросов от клиента номер порта может отличаться.

 

Многим функциямWinsock в качестве параметра нужен адрес сокета. Адрес сокета состоит из 32-разрядного IP-адреса и 16-разрядного номера порта. В Winsock для задания адреса используется 16-байтовая структура sockaddr_in:

struct sockaddr_in {

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

char sin_zero[8];

}; // Struct sockaddr_in

 

IP-адрес хранится как значение типа in_addr, определенное следующим образом:

struct in_addr {

union { u_char s_b1, s_b2, s_b3, s_b4;

struct {u_short s_w1, s_w2;} S_un_w;

u_long S_addr;

} S_un;

}; // struct in_addr