Windows CGI интерфейс


Оглавление (нажмите, чтобы открыть):

Технология Common Gateway Interface (CGI)

Вы когда-нибудь просматривали заголовки новостей в WWW?
Вы когда-нибудь пользовались услугами Web-магазинов?
Приходилось ли вам заполнять форму на Web-узле?
— Если хотя бы на один из этих вопросов вы ответили утвердительно, значит, вы не просто рассматривает Web-страницы, а имеете дело с Web-приложениями.

Разработчикам программного обеспечения понадобилось не очень много времени, чтобы понять, что в WWW можно не только демонстрировать статические картинки. Действительно в наше время можно говорить, что Web-приложения постепенно вытесняют простой HTML- текст. Если вам нужно принять и обработать информацию от посетителя вашей Web-страницы, или получить доступ к некоторой базе данных, или воспользоваться некоторой внешней по отношению к Web-серверу программой — во всех этих случаях вам придётся иметь дело с Web-приложением.

В этом разделе вы узнаете, как создавать Web-приложения с помощью технологии Common Gateway Interface (CGI) — на сегодняшний день основной платформой для создания интерактивных Web-приложений.

Что такое CGI-программа?

Если Web-сервер может запустить программу на выполнение и если программа возвращает правильные данные, она может быть использована в качестве CGI-программы. Что такое CGI? CGI скрипты используются для создания динамического содержимого сайта. (Например, таких элементов как счетчики, формы, гостевые книги и многое другое) Вы можете писать свои собственные, устанавливать готовые, или использовать наши типовые CGI скрипты.

На каком языке должен быть написан скрипт CGI? — На серверах обычно поддерживаются скрипты, написанные на различных скриптовых языках: shell, Perl, php, Python.

Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
— Cколько яблок на березе, если на одной ветке их 5, на другой ветке — 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.

В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.

Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.

Интерфейс CGI

Общие вопросы

Известно, что обычный Web-сервер способен лишь просто считывать и возвращать клиенту уже существующие статические HTML-страницы (или сообщения об ошибках, если запрошенные страницы недоступны). Следовательно, разработчик Web-сайта не мог предоставить пользователям ничего, кроме статических Web-страниц, заранее размещенных на сервере. Однако в большинстве случаев необходимо организовывать интерактивное взаимодействие с пользователем, причем легко выделить ряд типовых задач:

  • Вывод динамически изменяющейся информации (например, текущего рейтинга или курса валюты)
  • Построение поисковых машин;
  • Организация счетчиков и систем статистического анализа;
  • Взаимодействие с базами данных. Одна из наиболее распространенных задач такого взаимодействия — отображение прайс-лист. Причем в большинстве случаев запрос к базе формируется динамически на основании задаваемых пользователем параметров;
  • Обработка результатов заполнения форм, интерактивного голосования;
  • Организация гостевых книг и чата

Для решения перечисленных выше задач необходимо применение некоторого программного кода, который запускался бы на сервере, получал параметры пользователя и формировал страничку-ответ, которая передавалась бы пользователю.
Однако вскоре стало ясно, что требуется более высокий уровень взаимодействия между клиентом и сервером, вследствие чего был разработан общий интерфейс маршрутизации (Common Gateway Interface — CGI). Интерфейс CGI позволяет Web- серверу запускать независимый процесс, и, основываясь на входных данных, полученных от пользователя, обрабатывать эту информацию и возвращать клиенту динамически создаваемую Web-страницу. При этом CGI-программа могла выполнять любой тип обработки данных, который требовался программисту, а также возвращать страницу любого вида, допустимого в рамках HTML.
CGI программы принято называть скриптами, и далее я буду придерживаться этого термина.
Стандартные CGI скрипты считывают информацию из стандартного потока ВВОДА (STDIN) и записывают результаты в стандартный поток вывода (STDOUT), а также считывают переменные окружения. С появлением интерфейса CGI Web сделала большой шаг вперед, поскольку сервера получили возможность предоставлять обработанные, уникальные ответы на запросы пользователей.
Однако CGI скриптам присущ ряд недостатков. Самый существенный из них — это большая ресурсоемкость. Дело в том, что для каждого запроса клиента к CGI скрипту WEB сервер вынужден запускать отдельный процесс. Т.о. десяток-другой одновременных запросов могут привести к существенному замедлению работы сервера. Другим недостатком CGI является то, что если HTML не зависит от платформы сервера (и почему бы ему зависеть — HTML документ просто хранится на WEB сервере как файл и передается по запросу), то CGI скрипт является приложением, и, следовательно, должен работать под той платформой и ОС, что и сервер WEB. Следовательно, CGI скрипты, написанные на Delphi, будуть работать только под операционной системой Windows 9x/NT/2k.

Алгоритм работы с использованием интерфейса CGI
Рассмотрим алгоритм взаимодействия приложения клиента (для краткости будем называть его браузером) с сервером при использовании интерфейса CGI:

  1. Браузер устанавливает соединение с WEB сервером
  2. Браузер передает серверу HTTP запрос
  3. WEB сервер анализирует запрос и выясняет, что это не запрос статической странички, и запрос к CGI скрипту. Может возникнуть вопрос — как он отличает запрос о передаче файла от запроса на выполнение CGI приложения. Как правило, это делается на основе анализа расширения. Более того, для многих WEB серверов приложение должно лежать в особой папке (ее типовое имя — CGI-BIN). В Microsoft IIS такой папки нет, зато есть права на папку (и в том числе отдельное право Execute — выполнить).
  4. При обнаружении указанного в запросе CGI приложения и наличие прав на запуск WEB сервер запускает приложение. При этом WEB сервер передает через CGI скрипту параметры запроса и ряд дополнительных данных через переменные окружения и стандартный поток ввода.
  5. CGI скрипт выполняет любые действия, которые сочтет нужными и в результате формирует ответные данные и выводит их в стандартный поток ввода. WEB сервер передается эти данные клиенту. Причем GCI скрипт может передавать не только HTM файлы, но и бинарные данные (например картинку или архив). Кроме передачи данных CGI скрипт может целиком сформировать HTTP ответ (вместе с заголовком) или выполнить перенаправление — указать адрес файла, который должен быть передан в качестве ответа. Последнее особенно удобно для организации подсчета количества скачиваний программы или для огранизации навигационной системы.
  6. WEB сервер разрывает соединение, завершая тем самым обмен

Легко заметить, что с технической точки зрения для приложения клиента (браузера, утилиты закачки и т.п.) нет никакой разницы между запросом статического документа и запросом к CGI скрипту. Эти различия существуют только на сервере.

Необходимый инструментарий разработчика
Как уже должно быть очевидно, для отладки и работы с CGI скриптами необходимо

  1. Установить WEB сервер, поддерживающий CGI
  2. Внимательно изучить настройки этого WEB сервера и уточнить, в каких каталогах следует размещать CGI скрипты, как их именовать, какие права необходимо предоставить пользователю, от имени которого будет работать WEB сервер
  3. Произвести настройки, необходимые на основании п.п. 2

Следует отметить, что наиболее распространенной ошибкой начинающих разработчиков являются ошибки в настройках сервера.
Возникает вопрос — какой сервер использовать. Тут я не советчик, я тестировал свои примеры на Microsoft IIS под Windows NT (если под рукой есть лицензионный NT и IIS, то грех его не использовать). Я бы рекомендовал для первых опытов использовать отменную программу Simple HTTP Server (http://www.wplus.net/pp/mrdoors/srv/srv.zip, разработчик М. Феоктистов) — при размере 9 кб это WEB сервер с поддержкой CGI, не содержащий не единой настройки. Правда, он не поддерживает метод POST, но для простейших примеров можно обойтись без него. Можно так же скачать что-то типа TinyWeb (http://www.ritlabs.com/tinyweb) или FolkWeb (www.ilar.com/folkweb), а еще лучше сходить например на www.listsoft.ru и посмотреть там. Есть очень хороший WEB сервер Apache, но я бы не рекомендовал его начинающим, т.к. это штука серьезная и требует настройки.

Выбор языка программирования
Скажу пару слов на извечную тему — «на чем писать». Я не хочу ничего рекомендовать, просто отмечу, что с точки зрения переносимости удобны C, Java, Perl, PHP; точки зрения быстродействия — C, Delphi; с точки зрения отвратительной читаемости и отменного набора возможностей по манипулированию строками — PERL и т.п.
У Delphi есть у данном случаен минус — программа на Delphi работает только под Windows, что ограничивает его применение. С другой стророны, с появлением Kulix у разработчика появилась возможность переносить приложения Delphi на платформу Linux с минимальными переделками

Теоретические основы CGI

Поговорим о теории. Для начала следует отметить, что существует две технологии CGI:

  • CGI standalone executable — это обычное консольное приложение, взаимодействующее с сервером через переменные окружения и стандартные потоки ввода/вывода
  • Win-CGI standalone executable — это Windows приложение, получающее информацию о параметрах и запросе пользователя через INI файл и записывающее ответ в файл на диске

Рассмотрим подробно первый вариант как более универсальный.

Переменные окружения, устанавливаемые WEB сервером.

Переменная Назначение
AUTH_TYPE Используется для идентификации пользователя (при условии, что WEB сервер сконфигурирован так, что поддерживает идентификацию пользователя)
CONTENT_LENGTH Этот параметр содержит точный размер данных (в байтах), переданных в запросе. Пример: CONTENT_LENGTH = 14671
CONTENT_TYPE Тип данных, переданных в запросе. Пример: CONTENT_TYPE = text/html. Если результат заполнения формы передается по методу POST, то CONTENT_TYPE как правило равно application/x-www-form-urlencoded
GATEWEY_INTERFACE Номер выпуска используемой спецификации CGI. Имеет формат CGI/nnn, где nnn — номер выпуска. Пример: CGI/1.1
PATH_INFO Возвращает дополнительную информацию о пути. Так, например, если вызывается скрипт zaitsev.smolen.elektara.ru/cgi-bin/test1.exe/path1/path2/1.htm, то PATH_INFO будет равно /path1/path2/1.htm
PATH_TRANSLATED Путь, который пригоден для непосредственного использования в файловых операциях (учитывается то, что в запросе могут финурировать виртуальные директории и т.п.).
QUERY_STRING Очень важный и часто используемый параметр. Содержит строчку, переданную в качестве запроса при вызове CGI скрипта. К примеру, URL имеет вид zaitsev.smolen.elektara.ru/cgi-bin/test1.exe?name=Oleg+Zaitsev. Особенности: все пробелы заменяются знаком «+», параметры разделяются знаком «&» и имеют формат = . Все непечатные символы заменяются их кодами в формате %dd, где dd — код символа. В данном примере QUREY_STRING= name=Oleg+Zaitsev
REMOTE_ADDR IP адрес пользователя. Очень полезный параметр для фиксации в протоколе. В собственной сети большого предприятия компьютеры пользователей как правило имеют жестко закрепленные IP адреса, что может применяться для разграничения доступа. Пример: 192.20.97.28
REMOTE_HOST Имя узла, с которого делается запрос. Пример: 172.20.97.28 или zaitsev
REMOTE_IDENT Имя удаленного пользователя. Имеет формат имя.хост, например, zaitsev.www.smolen.elektra.ru
REMOTE_USER То-же, что и REMOTE_IDENT, но содержит только имя. Пример: zaitsev
REQUEST_METOD Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
SCRIPT_NAME Содержит путь к скрипту. Например, скрипт лежит на zaitsev.smolen.elektra.ru/cgi-bin/test1.exe, тогда SCRIPT_NAME = /cgi-bin/test1.exe
SERVER_NAME Имя (или IP адрес) домена
SERVER_PORT Номер порта, используемый браузером для связи с сервером. По умолчанию используется порт 80.
SERVER_PROTOCOL Содержит версию протокола HTTP, используемую в запросе (см. протокол HTTP). Пример: HTTP/3.2
SERVER_SOFTWARE Произвольная строчка, несущая информацию о названии WEB сервера, его версии и т.п. Ряд серверов позволяет запретить формирование этой строчки или подставить в нее любые данные
HTTP_*** Переменные с именами HTTP_*** являются необязательными и содержат значения необязательных параметров HTTP запроса с именами ***. При формировании этих параметров есть особенность — все символы переноса «-» заменяются на «_». Примеры: HTTP_ACCEPT, HTTP _USER_AGENT, HTTP_REFERER

Примечание: конкретные значения и их вид сильно зависят от сервера. Многие сервера не поддерживаю один или несколько параметров

Формат ответа CGI скрипта
Корректно написанный CGI скрипт должен сформировать ответ, содержащий заголовок. Заголовок отделяется от последующих данных пустой строкой (т.е. CR+LF, что достигается оператором writeln;). Если заголовок не содержит директив WEB серверу, то он считает, что скрипт сам формирует заголовок HTTP ответа и передает его клиенту как есть. В настоящее время определено три директивы:

Директива Назначение
Content-type Тип ответа скрипта. Например, если скрипт возвращает HTML документ, то возвращается Content-type: text/html
Location Указатель на документ, который должен быть возвращен в качестве ответа скрипта. Например, скрипт хочет переадресовать пользователя на некоторый документ. Тогда он формирует заголовок Location: http://www.chat.ru/

z_ol

Status Возвращает код статуса в стандартном формате. Применяется, если необходимо указание статуса, например Status: 404 Документ не найден

Примечание: простейшие WEB сервера могут игнорировать последние две директивы

От теории к практике — примеры программирования

Пример 1. Простейший CGI скрипт.
Генерирует динамическую страничку вида:

Hello, world Current date/time is 31.01.01 10:43:30

Исходный текст этого скрипта: Этот пример типовой, поэтому рассмотрим его подробно. Первая особенность — прагма компилятора <$APPTYPE CONSOLE>, указывающая но то, что это консольное приложение. Наличие этой пракмы обязательно, т.к. только у консольного приложения можно пользоваться операторами writeln.

Пример 2. Простейший CGI, формирующий динамическую HTML страничку со значениями всех переменных окружения и параметров командной строки.
Этот пример интересен не только в качестве примера, но и в качестве тестера — с его помощью легко посмотреть значения, передаваемые конкренным WEB сервером в различных случаях.
Исходный текст примера: В данном примере имеется функция , демонстрирующая, как читать значение переменной окружения через Windows API. Рассмотрим пример передачи бинарных данных (картинки, архива . ). Главная особенность (о которой не следует забывать !!) — необходимость корректного указания MIME типа передаваемых данных. Например, для передачи GIF картинки тип будет image/gif и т.п. Про это часто забывают. Исходный текст примера: Легко заметить, что передача ведется дубовым способом — побайтным выводом данных в стандартный поток вывода оператором Write. Ну, на то он и пример.

Пример 4. Обработка заполненной формы — передача по методу GET
Итак, разработаем для примера простейшую форму: Естественно, для Ваших опытов придется подстроить путь к программе test EXE.

Для обработки переданных параметров имеет смысл написать библиотеку функций, которая облегчит процесс разбора и перекодировки параметров. Эту библиотеку можно скачать здесь (размер 2 кб).Библиотека содержит две функции: Первая читает значение указанной переменной окружения, а вторая декодирует значение параметра (учитывая всю специфику — замену пробела на +, непечатных символов на их шеснадцатеричные коды). Кроме того, в библиотеке описан класс Итак, сам пример 4: Исходные тексты примеров можно скачать здесь примеры CGI.

Query Results

  • RealName = Петров Иван Сидорович
  • Sex = Мужской
  • Submit = Послать запрос

И на экране браузера
Query Results
You submitted the following name/value pairs:
RealName = Петров Иван Сидорович
Sex = Мужской
Submit = Послать запрос

Ниже приведен исходный текст программы post-query.

#include
#ifndef NO_STDLIB_H
#include
#elsechar *getenv();
#endif
#define MAX_ENTRIES 10000

typedef struct <
char *name;
char *val;
> entry;

char *makeword(char *line, char stop);
char *fmakeword(FILE *f, char stop, int *len);
char x2c(char *what);
void unescape_url(char *url);
void plustospace(char *str);

main(int argc, char *argv[])

<
entry entries[MAX_ENTRIES];
register int x,m=0;
int cl;
printf(«Content-type: text/html%c%c»,10,10);
if(strcmp(getenv(«REQUEST_METHOD»),»POST»))
< printf("This script should be referenced with a METHOD of POST.\n");
printf(«If you don’t understand this, see this «); printf(» forms overview.%c»,10);
exit(1);
> if(strcmp(getenv(«CONTENT_TYPE»),»application/x-www-form-urlencoded»)) exit(1);
>
cl = atoi(getenv(«CONTENT_LENGTH»));
for(x=0;cl && (!feof(stdin));x++)
unescape_url(entries[x].val);
entries[x].name = makeword(entries[x].val,’=’);
>
printf(«

Query Results

Надо отметить, что post-query не обрабатывает имена, поэтому в примере они даны на английском языке. Если Вы используете русские названия имен, то вы должны обработать имена также как и значения, т.е. заменить все символы «+» на пробелы и преобразовать шестнадцатеричные коды кириллических символов в сам символ.
Приведем также исходный текст функций используемых post-query

char *makeword (char *line, char stop) <
/* Предназначена для выделения части строки, ограниченной «стоп-символами»*/
int x = 0,y;
char *word = (char *) malloc(sizeof(char) * (strlen(line) + 1));
for(x=0;((line[x]) && (line[x] != stop));x++)
word[x] = line[x];
word[x] = ‘\0’;
if(line[x]) ++x;
y=0;

while(line[y++] = line[x++]);
return word;
>

char *fmakeword (FILE *f, char stop, int *cl) <
/* Предназначена для выделения строки, ограниченной «стоп-символом» stop, из потока f длиной cl.
*/
int wsize;
char *word;
int ll;

wsize = 102400;
ll=0;
word = (char *) malloc(sizeof(char) * (wsize + 1));

while(1) <
word[ll] = (char)fgetc(f);
if(ll==wsize) <
word[ll+1] = ‘\0’;
wsize+=102400;
word = (char *)realloc(word,sizeof(char)*(wsize+1));
>
—(*cl);
if((word[ll] == stop) || (feof(f)) || (!(*cl))) <
if(word[ll] != stop) ll++;
word[ll] = ‘\0’;
return word;
>
++ll;
>
>

char x2c (char *what) <
/* Предназначена для преобразования шестнадцатиричного кода символа в код символа
*/
register char digit;

digit = (what[0] >= ‘A’ ? ((what[0] & 0xdf) — ‘A’)+10 : (what[0] — ‘0’));
digit *= 16;
digit += (what[1] >= ‘A’ ? ((what[1] & 0xdf) — ‘A’)+10 : (what[1] — ‘0’));
return(digit);
>

void unescape_url (char *url) < register int x,y; for(x=0,y=0;url[y];++x,++y) <
if((url[x] = url[y]) == ‘%’) <
url[x] = x2c(&url[y+1]);
y+=2;
>
>
url[x] = ‘\0’;
>

void plustospace (char *str) <
/*замена символов «+» на символ «пробел»*/
register int x;

for(x=0;str[x];x++) if(str[x] == ‘+’) str[x] = ‘ ‘;
>

Для демонстрации реализации формы с методом запроса GET воспользуемся той же самой формой, что и для метода POST и программой query. Для этого изменим значение атрибутов ACTION и METHOD в теге FORM.

использование: предназначен для получения информации от клиента и определяет начало и конец формы.

атрибуты:

    Обязательные
    ACTION — определяет URI (Universal Resource Identifier-адрес или место расположения документа) CGI-скрипта
    METHOD — определяет метод передачи информации скрипту. Возможные значения GET или POST.

  • Необязательные
    [ENCTYPE] — определяет тип MIME декодирования информации (значение этого атрибута по умолчанию — «application/x-www-form-urlencoded»).
    [SCRIPT] — используется для передачи URI скрипта. Язык скрипта и интерфейс пользователя при этом не являются частью спецификации HTML 3.0
  • Важно: Формы не могут быть вложенными!

    Для реализации формы используются следующие теги.

    использование: предназначен для создания различных по своей функциональности полей ввода.


    TYPE — определяет тип поля формы.

      Допустимые значения:
      TEXT — позволяет символьный ввод.
      PASSWORD — предназначено для «скрытого» ввода символов (вводимые символы не отображаются).
      CHECKBOX — поле, позволяющее два состояния («есть», «нет»). Должен применяться с атрибутами NAME и VALUE
      RADIO — поле, позволяющее выбор «один из всех»
      SUBMIT — кнопка инициирующая передачу информации из формы обрабатывающему скрипту, определенному в ACTION в соответствии с методом, определенным атрибутом METHOD.
      RESET — кнопка, сбрасывающая все введенные ранее значения.
      IMAGE — поле позволяющее воспроизвести событие SUBMIT при помощи вашего изображения, при этом возвращается два значения: name.x = координата Х и name.y = координата Y, где Х и Y координаты положения курсора мыши на изображении в момент щелчка.
      HIDDEN — поле создающее неотображаемое значение.
      RANGE — определяет поле позволяющее ввести цифровое значение с определенными допустимыми верхним и нижним пределами.
      Используется вместе с атрибутами MAX и MIN определяющими область допустимых значений (например: TYPE=RANGE MIN=1 MAX=10).

    NAME — значение этого атрибута определяет идентификатор поля.
    VALUE — значение этого атрибута определяет что будет передано в качестве значения по умолчанию для данного поля при инициации формы.
    SRC — определяет URI файла изображения. Используется только с типом поля IMAGE.
    [CHECKED] — позволяет установить начальное значение поля типа CHECKBOX.
    SIZE — определяет размер поля.
    [MAXLENGTH] — определяет максимальное количество символов, допустимое для ввода в поле.
    [ALIGN] — позволяет позиционирование

      Допустимые значения:
    • по вертикали
      TOP — выравнивание по верху.
      MIDDLE — выравнивание по середине.
      BOTTOM выравнивание по низу.
      Эти значения используются только с TYPE=IMAGE.
    • по горизонтали
      [LEFT] — выравнивание слева
      [RIGHT] — выравнивание справа

    [DISABLED] — определяет поле как «read only» — только для чтения. Значение в поле не может быть изменено пользователем.
    [ERROR] — определяет сообщение об ошибке, объясняющее, почему введенное значение в поле не верно.

    использование: предназначен для определения области ввода текста. Размер поля определяется атрибутами.

    NAME — значение этого атрибута определяет идентификатор поля. Возвращается при инициации формы.
    ROWS — определяет количество строк в текстовой области.
    COLS — определяет количество столбцов в текстовой области.
    [VALUE] — задает значение по умолчанию.
    [DISABLED] — определяет поле как «read only» — только для чтения. Значение в поле не может быть изменено пользователем.
    [ERROR] — определяет сообщение об ошибке, объясняющее, почему введенное значение в поле не верно.

    использование: предназначен для определения области выбора из нескольких значений (меню).

    NAME — значение этого атрибута определяет идентификатор поля. Возвращается при инициации формы.
    [SIZE] — определяет количество видимых возможных значений.
    [MULTIPLE] — определяет возможность множественного выбора.
    [DISABLED] — определяет меню как «read only» — только для чтения. Значения в меню не может быть выбрано пользователем и показывается серым цветом.

    использование: используется только с для определения пунктов меню.

    SELECTED — определяет значение по умолчанию
    VALUE — определяет возвращаемое значение

    Примечание: в [ ] даны необязательные атрибуты

    Записки IT специалиста

    Технический блог специалистов ООО»Интерфейс»

    • Главная
    • Создаем свой сайт. Как устроен и работает веб-сервер

    Создаем свой сайт. Как устроен и работает веб-сервер

    • Автор: Уваров А.С.
    • 15.03.2020

    Что такое веб-сервер? С точки зрения обывателя — это некий черный ящик, который обрабатывает запросы браузера и выдает в ответ веб-страницы. Технический специалист засыплет вас массой малопонятных терминов. В итоге начинающим администраторам веб-серверов бывает порой трудно разобраться во всем многообразии терминов и технологий. Действительно, область веб-разработки динамично развивается, но в основе многих современных решений лежат базовые технологии и принципы, о которых мы сегодня и поговорим.

    Если не знаешь с чего начать, то начинать надо сначала. Чтобы не запутаться во всем многообразии современных веб-технологий нужно обратиться к истории, чтобы понять, с чего начинался современный интернет и как развивались и совершенствовались технологии.

    HTTP-сервер

    На заре развития интернета сайты представляли собой простое хранилище специальным образом размеченных документов и некоторых связанных с ними данных: файлов, изображений и т.п. Для того, чтобы документы могли ссылаться друг на друга и связанные данные был предложен специальный язык гипертекстовой разметки HTML, а для доступа к таким документам посредством сети интернет протокол HTTP. И язык, и протокол, развиваясь и совершенствуясь, дожили до наших дней без существенных изменений. И только начавший приходить на смену принятому в 1999 году протоколу HTTP/1.1 протокол HTTP/2 несет кардинальные изменения с учетом требований современной сети.

    Протокол HTTP реализован по клиент-серверной технологии и работает по принципу запрос-ответ без сохранения состояния. Целью запроса служит некий ресурс, который определяется единым идентификатором ресурсаURI ( Uniform Resource Identifier), HTTP использует одну из разновидностей URI — URL (Uniform Resource Locator) — универсальный указатель ресурса, который помимо сведений о ресурсе определяет также его физическое местоположение.

    Задача HTTP-сервера обработать запрос клиента и либо выдать ему требуемый ресурс, либо сообщить о невозможности это сделать. Рассмотрим следующую схему:

    Пользователь посредством HTTP-клиента, чаще всего это браузер, запрашивает у HTTP-сервера некий URL, сервер проверяет и отдает соответствующий этому URL-файл, обычно это HTML-страница. Полученный документ может содержать ссылки на связанные ресурсы, например, изображения. Если их нужно отображать на странице, то клиент последовательно запрашивает их у сервера, кроме изображений также могут быть запрошены таблицы стилей, скрипты, исполняемые на стороне клиента и т.д. Получив все необходимые ресурсы браузер обработает их согласно кода HTML-документа и выдаст пользователю готовую страницу.

    Как уже многие догадались, под именем HTTP-сервера в данной схеме находится сущность, которая более известна сегодня под названием веб-сервер. Основная цель и задача веб-сервера — обработка HTTP-запросов и возврат пользователю их результатов. Веб-сервер не умеет самостоятельно генерировать контент и работает только со статическим содержимым. Это актуально и для современных веб-серверов, несмотря на все богатство их возможностей.

    Долгое время одного веб-сервера было достаточно для реализации полноценного сайта. Но по мере роста сети интернет возможностей статического HTML стало остро не хватать. Простой пример: каждая статическая страница самодостаточна и должна содержать ссылки на все связанные с ней ресурсы, при добавлении новых страниц ссылки на них потребуется добавить на уже существующие страницы, иначе пользователь никогда не сможет попасть на них.

    Сайты того времени вообще мало походили на современные, например, ниже показан вид одного из пионеров русскоязычного интернета, сайт компании Rambler:

    А переход по любой из ссылок вообще может привести современного пользователя в недоумение, вернуться назад с такой страницы не представляется возможным, кроме как через нажатие одноименной кнопки в браузере.

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

    Поэтому следующим шагом в развитии веб-серверов стала поддержка технологии включения на стороне сервераSSI (Server Side Includes). Она позволяла включать в код страницы содержимое иных файлов, что давало возможность вынести повторяющиеся элементы, такие как шапка, подвал, меню и т.п. в отдельные файлы и просто подключать при окончательной сборке страницы.

    Теперь, чтобы изменить логотип или пункт меню изменения надо будет внести всего лишь в один файл, вместо правки всех существующих страниц. Кроме того, SSI позволял выводить на страницы некоторое динамическое содержимое, например, актуальную дату и выполнять несложные условия и работать с переменными. Это был значительный шаг вперед, облегчавший труд вебмастеров и повышавший удобство пользователей. Однако реализовать по-настоящему динамический сайт данные технологии все еще не позволяли.

    Стоит отметить, что SSI активно применяется и сегодня, там, где в код страницы нужно вставить некий статический контент, прежде всего благодаря простоте и нетребовательности к ресурсам.

    Следующим шагом в развитии веб-технологии стало появление специальных программ (скриптов) выполняющих обработку запроса пользователей на стороне сервера. Чаще всего они пишутся на скриптовых языках, первоначально это был Perl, сегодня пальму лидерства удерживает PHP. Постепенно возник целый класс программ — системы управления контентом — CMS (Content management system), которые представляют полноценные веб-приложения способные обеспечить динамическую обработку запросов пользователя.

    Теперь важный момент: веб-сервера не умели и не умеют выполнять скрипты, их задача — отдача статического содержимого. Здесь на сцену выходит новая сущность — сервер приложений, который представляет собой интерпретатор скриптовых языков и с помощью которого работают написанные на них веб-приложения. Для хранения данных обычно используются СУБД, что обусловлено необходимостью доступа к большому количеству взаимосвязанной информации.

    Однако сервер приложений не умеет работать с протоколом HTTP и обрабатывать пользовательские запросы, так как это задача веб-сервера. Чтобы обеспечить их взаимодействие был разработан общий интерфейс шлюзаCGI (Common Gateway Interface).

    Следует четко понимать, CGI — это не программа и не протокол, это именно интерфейс, т.е. совокупность способов взаимодействия между приложениями. Также не следует путать термин CGI с понятием CGI-приложения или CGI-скрипта, которыми обозначают программу (скрипт) поддерживающую работу через интерфейс CGI.

    Для передачи данных используются стандартные потоки ввода-вывода, от веб-сервера к СGI-приложению данные передаются через stdin, принимаются назад через stdout, для передачи сообщений об ошибках используется stderr.

    Рассмотрим процесс работы такой системы подробнее. Получив запрос от браузера пользователя веб-сервер определяет, что запрошено динамическое содержимое и формирует специальный запрос, которой через интерфейс CGI направляет веб-приложению. При его получении приложение запускается и выполняет запрос, результатом которого служит HTML-код динамически сформированной страницы, который передается назад веб-серверу, после чего приложение завершает свою работу.

    Еще одно важное отличие динамического сайта — его страницы физически не существуют в том виде, который отдается пользователю. Фактически имеется веб-приложение, т.е. набор скриптов и шаблонов, и база данных, которая хранит материалы сайта и служебную информацию, отдельно располагается статическое содержимое: картинки, java-скрипты, файлы.

    Получив запрос веб-приложение извлекает данные из БД и заполняет ими указанный в запросе шаблон. Результат отдается веб-серверу, который дополняет сформированную таким образом страницу статическим содержимым (изображения, скрипты, стили) и отдает ее браузеру пользователя. Сама страница при этом нигде не сохраняется, разве что в кэше, и при получении нового запроса произойдет повторная генерация страницы.


    К достоинствам CGI можно отнести языковую и архитектурную независимость: CGI-приложение может быть написано на любом языке и одинаково хорошо работать с любым веб-сервером. Учитывая простоту и открытость стандарта это привело к бурному развитию веб-приложений.

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

    На текущий момент CGI практически не применяется, так как ему на смену пришли более совершенные технологии.

    FastCGI

    Как следует из названия, основной целью разработки данной технологии было повышение производительности CGI. Являясь ее дальнейшим развитием FastCGI представляет собой клиент-серверный протокол для взаимодействия веб-сервера и сервера приложений, обеспечивающий высокую производительность и безопасность.

    FastCGI устраняет основную проблему CGI — повторный запуск процесса веб-приложения на каждый запрос, FastCGI процессы запущены постоянно, что позволяет существенно экономить время и ресурсы. Для передачи данных вместо стандартных потоков используются UNIX-сокеты или TCP/IP, что позволяет размещать веб-сервер и сервера приложений на разных хостах, таким образом обеспечивая масштабирование и/или высокую доступность системы.

    Также мы можем запустить на одном компьютере несколько FastCGI процессов, которые могут обрабатывать запросы параллельно, либо иметь различные настройки или версии скриптового языка. Например, можно одновременно иметь несколько версий PHP для разных сайтов, направляя их запросы разным FastCGI процессам.

    Для управления FastCGI процессами и распределением нагрузки служат менеджеры процессов, они могут быть как частью веб-сервера, так и отдельными приложениями. Популярные веб-сервера Apache и Lighttpd имеют встроенные менеджеры FastCGI процессов, в то время как Nginx требует для своей работы c FastCGI внешний менеджер.

    PHP-FPM и spawn-fcgi

    Из внешних менеджеров для FastCGI процессов применяются PHP-FPM и spawn-fcgi. PHP-FPM первоначально был набором патчей к PHP от Андрея Нигматулина, решавший ряд вопросов управления FastCGI процессами, начиная с версии 5.3 является частью проекта и входит в поставку PHP. PHP-FPM умеет динамически управлять количеством процессов PHP в зависимости от нагрузки, перезагружать пулы без потери запросов, аварийный перезапуск сбойных процессов и представляет собой достаточно продвинутый менеджер.

    Spawn-fcgi является частью проекта Lighttpd, но в состав одноименного веб-сервера не входит, по умолчанию Lighttpd использует собственный, более простой, менеджер процессов. Разработчики рекомендуют использовать его в случаях, когда вам нужно управлять FastCGI процессами расположенными на другом хосте, либо требуются расширенные настройки безопасности.

    Внешние менеджеры позволяют изолировать каждый FastCGI процесс в своем chroot (смена корневого каталога приложения без возможности доступа за его пределы), отличном как от chroot иных процессов, так и от chroot веб-сервера. И, как мы уже говорили, позволяют работать с FastCGI приложениями расположенными на других серверах через TCP/IP, в случае локального доступа следует выбирать доступ через UNIX-сокет, как быстрый тип соединения.

    Если снова посмотреть на схему, то мы увидим, что у нас появился новый элемент — менеджер процессов, который является посредником между веб-сервером и серверами приложений. Это несколько усложняет схему, так как настраивать и сопровождать приходится большее количество служб, но в тоже время открывает более широкие возможности, позволяя настроить каждый элемент сервера четко под свои задачи.

    На практике, выбирая между встроенным менеджером и внешним здраво оцените ситуацию и выбирайте именно тот инструмент, который наиболее подходит вашим запросам. Например, создавая простой сервер для нескольких сайтов на типовых движках применение внешнего менеджера будет явно излишним. Хотя никто не навязывает вам своей точки зрения. Linux тем и хорош, что каждый может, как из конструктора, собрать именно то, что ему надо.

    SCGI, PCGI, PSGI, WSGI и прочие

    Погружаясь в тему веб-разработки, вы непременно будете встречаться с упоминанием различных CGI-технологий, наиболее популярные из которых мы перечислили в заголовке. От такого многообразия можно и растеряться, но если вы внимательно прочитали начало нашей статьи, то знаете, как работает CGI и FastCGI, а, следовательно, разобраться с любой из этих технологий не составит для вас труда.

    Несмотря на различия в реализациях того или иного решения базовые принципы остаются общими. Все эти технологии предоставляют интерфейс шлюза (Gateway Interface) для взаимодействия веб-сервера с сервером приложений. Шлюзы позволяют развязать между собой среды веб-сервера и веб-приложения, позволяя использовать любые сочетания без оглядки на возможную несовместимость. Проще говоря, неважно, поддерживает ли ваш веб-сервер конкретную технологию или скриптовый язык, главное, чтобы он умел работать с нужным типом шлюза.

    И раз уж мы перечислили в заголовке целую пачку аббревиатур, то пройдем по ним более подробно.

    SCGI (Simple Common Gateway Interface) — простой общий интерфейс шлюза — разработан как альтернатива CGI и во многом аналогичен FastCGI, но более прост в реализации. Все, о чем мы рассказывали применительно к FastGCI справедливо и для SCGI.

    PCGI (Perl Common Gateway Interface) — библиотека Perl для работы с интерфейсом CGI, долгое время являлась основным вариантом работы с Perl-приложениями через CGI, отличается хорошей производительностью (насколько это применимо к CGI) при скромных потребностях в ресурсах и неплохой защиты от перегрузки.

    PSGI (Perl Web Server Gateway Interface) — технология взаимодействия веб-сервера и сервера приложений для Perl. Если PCGI представляет собой инструмент для работы с классическим CGI интерфейсом, то PSGI более напоминает FastCGI. PSGI-сервер представляет среду для выполнения Perl-приложений которая постоянно запущена в качестве службы и может взаимодействовать с веб-сервером через TCP/IP или UNIХ-сокеты и предоставляет Perl-приложениям те же преимущества, что и FastCGI.

    WSGI (Web Server Gateway Interface) — еще один специфичный интерфейс шлюза, предназначенный для взаимодействия веб-сервера с сервером приложений для программ, написанных на языке Phyton.

    Как несложно заметить, все перечисленные нами технологии являются в той или иной степени аналогами CGI/FastCGI, но для специфичных областей применения. Приведенных нами данных будет вполне достаточно для общего понимания принципа и механизмов их работы, а более глубокое их изучение имеет смысл только при серьезной работе с указанными технологиями и языками.

    Сервер приложений как модуль Apache

    Если раньше мы говорили о неком абстрактном веб-сервере, то теперь речь пойдет о конкретном решении и дело здесь не в наших предпочтениях. Среди веб-серверов Apache занимает особое место, в большинстве случаев, когда говорят о веб-сервере на платформе Linux, да и о веб-сервере вообще, то подразумеваться будет именно Apache.

    Можно сказать, что это своего рода веб-сервер «по умолчанию». Возьмите любой массовый хостинг — там окажется Apache, возьмите любое веб-приложение — настройки по умолчанию выполнены под Apache.

    Да, с технологической точки зрения Apache не является венцом технологий, но именно он представляет золотую середину, прост, понятен, гибок в настройках, универсален. Если вы делаете первые шаги в сайтостроении — то Apache ваш выбор.

    Здесь нас могут упрекнуть, что Apache уже давно неактуален, все «реальные пацаны» уже поставили Nginx и т.д. и т.п., поэтому поясним данный момент более подробно. Все популярные CMS из коробки сконфигурированы для использования совместно с Apache, это позволяет сосредоточить все внимание на работу именно с веб-приложением, исключив из возможного источника проблем веб-сервер.

    Все популярные среди новичков форумы тоже подразумевают в качестве веб-сервера Apache и большинство советов и рекомендаций будут относиться именно к нему. В тоже время альтернативные веб-сервера как правило требуют более тонкой и тщательной настройки, как со стороны веб-сервера, так и со стороны веб-приложения. При этом пользователи данных продуктов обычно гораздо более опытны и типовые проблемы новичков в их среде не обсуждаются. В итоге может сложиться ситуация, когда ничего не работает и спросить не у кого. С Apache такого гарантированно не произойдет.

    Собственно, что такого сделали разработчики Apache, что позволило их детищу занять особое место? Ответ достаточно прост: они пошли своим путем. В то время как CGI предлагал абстрагироваться от конкретных решений, сосредоточившись на универсальном шлюзе, в Apache поступили по-другому — максимально интегрировали веб-сервер и сервер приложений.

    Действительно, если запустить сервер приложений как модуль веб-сервера в общем адресном пространстве, то мы получим гораздо более простую схему:

    Какие преимущества это дает? Чем проще схема и меньше в ней элементов, тем проще и дешевле сопровождать ее и обслуживать, тем меньше в ней точек отказа. Если для единичного сервера это может быть не так важно, то в рамках хостинга это весьма значительный фактор.

    Второе преимущество — производительность. Снова огорчим поклонников Nginx, благодаря работе в едином адресном пространстве, по производительности сервера приложений Apache + mod_php всегда будет на 10-20% быстрее любого иного веб-сервера + FastCGI (или иное CGI решение). Но также следует помнить, что скорость работы сайта обусловлена не только производительностью сервера приложений, но и рядом иных условий, в которых альтернативные веб-сервера могут показывать значительно лучший результат.

    Но есть еще одно, достаточно серьезное преимущество, это возможность настройки сервера приложений на уровне отдельного сайта или пользователя. Давайте вернемся немного назад: в FastCGI/CGI схемах сервер приложений — это отдельная служба, со своими, отдельными, настройками, которая даже может работать от имени другого пользователя или на другом хосте. С точки зрения администратора одиночного сервера или какого-нибудь крупного проекта — это отлично, но для пользователей и администраторов хостинга — не очень.

    Развитие интернета привело к тому, что количество возможных веб-приложений (CMS, скриптов, фреймворков и т.п.) стало очень велико, а низкий порог вхождения привлек к сайтостроению большое количество людей без специальных технических знаний. В тоже время разные веб-приложения могли требовать различной настройки сервера приложений. Как быть? Каждый раз обращаться в поддержку?

    Решение нашлось довольно просто. Так как сервер-приложений теперь часть веб-сервера, то можно поручить последнему управлять его настройками. Традиционно для управления настройками Apache помимо конфигурационных файлов применялись файлы httaccess, которые позволяли пользователям писать туда свои директивы и применять их к той директории, где расположен данный файл и ниже, если там настройки не перекрываются своим файлом httaccess. В режиме mod_php данные файлы позволяют также изменять многие опции PHP для отдельного сайта или директории.

    Для принятия изменений не требуется перезапуск веб-сервера и в случае ошибки перестанет работать только этот сайт (или его часть). Кроме того, внести изменения в простой текстовый файл и положить его в папку на сайте под силу даже неподготовленным пользователям и безопасно для сервера в целом.

    Сочетание всех этих преимуществ и обеспечило Apache столь широкое применение и статус универсального веб-сервера. Другие решения могут быть быстрее, экономичнее, лучше, но они всегда требуют настройки под задачу, поэтому применяются в основном в целевых проектах, в массовом сегменте безальтернативно доминирует Apache.

    Поговорив о достоинствах, перейдем к недостаткам. Некоторые из них просто являются обратной стороной медали. Тот факт, что сервер приложений является частью веб-сервера дает плюсы в производительности и простоте настройки, но в тоже время ограничивает нас как с точки зрения безопасности — сервер приложений всегда работает от имени веб-сервера, так и в гибкости системы, мы не можем разнести веб-сервер и сервер приложений на разные хосты, не можем использовать сервера с разными версиями скриптового языка или разными настройками.

    Второй минус — более высокое потребление ресурсов. В схеме с CGI сервер приложений генерирует страницу и отдает ее веб-серверу, освобождая ресурсы, связка Apache + mod_php держит ресурсы сервера приложений занятыми до тех пор, пока веб-сервер не отдаст содержимое страницы клиенту. Если клиент медленный, то ресурсы будут заняты на все время его обслуживания. Именно поэтому перед Apache часто ставят Nginx, который играет роль быстрого клиента, это позволяет Apache быстро отдать страницу и освободить ресурсы, переложив взаимодействие с клиентом на более экономичный Nginx.

    Заключение

    Охватить в одной статье весь спектр современных технологий невозможно, поэтому мы сосредоточились только на основных из них, некоторые вещи умышленно оставив за кадром, а также прибегли к существенным упрощениям. Несомненно, начав работать в этой области вам потребуется более глубокое изучение темы, но для того, чтобы воспринимать новые знания нужен определенный теоретический фундамент, который мы постарались заложить данным материалом.

    Интерфейс CGI

    Читайте также:

    1. Аппаратные требования и интерфейс Vista
    2. Архитектура как интерфейс между уровнями физической системы
    3. Архитектура системных интерфейсов
    4. Беспроводные интерфейсы связи. Инфракрасный интерфейс.
    5. Беспроводные интерфейсы связи. Радиоинтерфейс Bluetooth.
    6. Беспроводные интерфейсы.
    7. Взаимодействие с пользователями программы. Пользовательский интерфейс
    8. Виды интерфейсов пользователя
    9. Графический пользовательский интерфейс Windows.
    10. Инвентарь, необходимый для проектирования интерфейса
    11. Интерфейс ATA

    Термин CGI (Common Gateway Interface — Общий шлюзовой интерфейс)


    обозначает набор соглашений, которые должны соблюдаться Web-серверами при выполнении ими различных Web-приложений. Вскоре мы расшифруем его смысл гораздо более подробно. Фактически, до недавнего времени все Web-программирование представляло собой программирование CGI-приложений. В последнее время ситуация изменилась. И хотя CGI все еще остается негласным стандартом для Web-приложений, механизм работы CGI-программ несколько обновился.

    В этой и следующей главах мы будем разбирать основы традиционного CGI-программирования, не касаясь напрямую РНР. В качестве языка для

    примеров выбран Си, поскольку его компиляторы можно найти практически в любой операционной системе, и по той причине, что он «наиболее красиво» показывает, почему его не следует использовать в Web-программировании. Да-да, это не опечатка. Вскоре вы поймете, что я хотел сказать.

    Что такое CGI?

    Итак, мы набираем в нашем браузере

    Мы ожидаем, что сейчас получим HTML-документ (или документ другого формата — например, рисунок). Иными словами, мы рассчитываем, что на хосте в каталоге /path/to/ расположен файл document. ext, который нам сейчас и доставят (передаст его, кстати, Web-сервер, подключенный к порту 80 на сервере).

    Однако это может и не случиться. По двум причинам:

    · Путь /path/to/, ровно как и файл document.ext на хосте может вообще не существовать. Ведь администратор сервера имеет возможность задать псевдоним (alias) для любого объекта на сервере. Кроме того, даже если и не назначено никакого псевдонима, все равно имеется возможность так написать программы для Web-сервера, что они будут «перехватывать» каждое обращение к таким путям и соответствующим образом реагировать на это.

    · Файл document. ext может быть вовсе не текстовым документом, а программой, которая в ответ на наш запрос молниеносно запустится, не менее стремительно выполнится и возвратит пользователю результаты своей работы, хотя бы в том же HTML-формате (или, разумеется, в любом другом, — например, это может быть изображение). Пользователь и не догадается, что на самом деле произошло. Для него все равно, загружает ли он документ или невольно запускает программу. Более того, он никак не сможет узнать, что же на самом деле случилось.

    Последнее в общих чертах и иллюстрирует идею CGI. Как раз CGI обеспечивает все то, что выглядит так прозрачно для пользователя. Традиционно программы, работающие в соответствии с соглашениями CGI, называют сценариями — скорее всего из-за того, что в большинстве случаев их пишут на языках-интерпретаторах, подобных Basic (например, на Perl или РНР).

    По сути CGI — мощный механизм, который позволяет формировать документы «на лету». К примеру, пусть нужно, чтобы в каком-то документе проставлялись текущая дата и время. Так как нельзя заранее прописать их в документе — ведь в зависимости от того, когда он будет загружен пользователем, эта дата должна меняться, зато можно написать сценарий, который вычислит дату, вставит ее в документ и затем передаст его пользователю!

    | следующая лекция ==>
    Путь к странице | Content-type

    Дата добавления: 2014-01-06 ; Просмотров: 203 ; Нарушение авторских прав? ;

    Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

    CGI — зачем он нужен?

    31.03.2011, 16:22

    Разработка CGI-сценария, выдает ошибку, нужен совет
    Здравствуйте уважаемые программисты,очень срочно нужен ваш совет. Суть проблемы такова, в Apache.

    Запуск CGI вне cgi-bin и запуск index.cgi
    Никак не получается сделать настройку 1) Запуск CGI-программ ВНЕ /cgi-bin/ 2) Запуск index.cgi.

    Ошибка 500 cgi, нужно запустить батник через cgi
    Apache на Windows (!!) Если запускаю localhost/run.bat все работает исправно, скрипт простой.

    Perl + SSI = ошибка invalid CGI ref ‘http://сервер/cgi-bin/view_bag.pl’ in .
    Вопрос такой: Скрипт view_bag.pl без ошибок выполняется в папке /cgi-bin/, при этом атрибуты файла.

    31.03.2011, 18:52 2 31.03.2011, 19:07 3 01.04.2011, 04:46 [ТС] 4

    Я так понял, я могу взять перл, питон, С++, или даже Pascal, и используя HTML шаблоны, могу написать сайт, точно так же как и на PHP. Но используя другой язык программирования.

    Добавлено через 4 часа 16 минут
    В принципе, понемногу стал разбираться. Ответе мне, если PHP отлично заточен под веб разработку, тогда для чего юзать тот же PERL, PYTHON для этого ?

    01.04.2011, 04:46
    01.04.2011, 10:35 5

    Чтобы написать программу уровня «Hello world», вполне достаточно языка Си, но некоторым принципиально надо, чтобы было Си+. В 9 случаях из 10 причина простая: человек умеет работать на одном языке программирования, но не умеет на другом. Если человек по жизни программирует на Perl’е (НЕ в области web’а, а вообще), то ему на Perl’е куда проще написать cgi, чем разбираться с новым языком программирования. Многие умники на форуме тебе возразят, что php можно «выучить за 3 дня», вот таких смело посылай куда подальше, ибо выучить язык и владеть им свободно — это две большие разницы. Писать cgi можно хоть на интерпретаторе бэйсика, лишь бы была возможность со стороны http-сервера запустить такую программу

    01.04.2011, 18:21 [ТС] 6
    01.04.2011, 23:40 7
    28.06.2011, 00:04 8
    28.06.2011, 09:03 9
    28.06.2011, 13:10 10
    28.06.2011, 19:36 11
    29.06.2011, 01:07 12
    29.06.2011, 12:08 13

    А что, бывает и другое?

    В моём понятии есть некий интерфейс взаимодействия сервера и клиента. Клиент отправил на сервер запрос, сервер вернул клиенту данные (код страницы, картинки, видео и т.п.). Какми образом получены данные (статическая страница или динамически сгенерированная), клиент и знать не знает (да и незачем).

    Чтобы формировать динамические страницы, есть внутренний интерфейс между http-сервером и программой, которая запускается из-под http-сервера и генерит данные, которые сервер должен отправить клиенту. Этот интерфейс взаимодействия между http-сервером и программой, генерящей данные, и есть CGI. На чём написана программа — на Си, на Perl, на php — серверу плевать. Сервер запускает программу и получает от неё данные в соответсвии с интерфейсом CGI

    29.06.2011, 17:07 14

    А что, бывает и другое?

    В моём понятии есть некий интерфейс взаимодействия сервера и клиента. Клиент отправил на сервер запрос, сервер вернул клиенту данные (код страницы, картинки, видео и т.п.). Какми образом получены данные (статическая страница или динамически сгенерированная), клиент и знать не знает (да и незачем).

    Чтобы формировать динамические страницы, есть внутренний интерфейс между http-сервером и программой, которая запускается из-под http-сервера и генерит данные, которые сервер должен отправить клиенту. Этот интерфейс взаимодействия между http-сервером и программой, генерящей данные, и есть CGI. На чём написана программа — на Си, на Perl, на php — серверу плевать. Сервер запускает программу и получает от неё данные в соответсвии с интерфейсом CGI

    Образовательный блог — всё для учебы

    1) Общие сведения о CGI
    С 1993 года CGI является очень часто используемой технологией создания трехзвенных клиент/серверных приложений в Интернет. CGI-приложение совместно с Web-сервером выполняют роль сервера приложений в трехзвенной архитектура клиент/сервер. CGI – набор правил (спецификация), согласно которым пользовательские программы, запускаемые на Web-сервера, могут возвращать данные клиенту в виду HTML-документа. CGI – это консольное приложение, загружаемое в ответ на запрос клиента на выборку или обновление данных, функционирующее как отдельный однопоточный процесс под управлением Web-сервера и выгружаемое сразу после завершения работы. WinCGI – Windows реализация CGI.

    2) Варианты реализации
    Программа, запускаемая Web-сервером в соответствии со спецификацией CGI, называется CGI-скриптом. Она может быть написана на любом языке программирование (С, Basic, Pascal и т.п.) или на командной языке (языки shell, perl и т.п.), допускающем создание исполняемых модулей. CGI-скрипт исполняет роль посредника между Web-сервером и другими серверами, например, сервером БД, и поэтому часто называется шлюзом. CGI-программы по умолчанию размещаются в каталоге C:\InetPub\Scripts|Cgi-bin, но можно создавать и свой виртуальный каталог.

    3) Способы взаимодействия CGI и WEB-сервера
    В спецификации CGI предусмотрено несколько способов взаимодействия CGI-программы и Web-сервера, отличающиеся вариантом обмена данными между сервером и программой.
    • Передача параметров в командной строке (например, с помощью дескриптором ISINDEX, помещаемого в раздел HTML-документа, или FORM-URLENCODED).
    • Передача значений переменных окружения (их более 17 штук).
    • Передача данных через стандартный входной поток (STDIN, STDOUT).


    Запрос типа ISINDEX – это запрос вида: http://site.ru/somthig-cgi/cgi-script?слово1+слово2+слово3
    Главным здесь является список слов после символа «?». Слова перечисляются через символ «+» и для кириллицы не кодируются в шестнадцатеричные последовательности. Последовательность слов после символа «?» будет размещена в переменной окружения QUERY_STRING.

    Запрос типа FORM-URLENCODED – это запрос вида: http://site.ru/something-cgi/cgi-script?field=word1&field2=word2
    Данные формы записываются в виде пар «имя_поля-значение», которые разделены символом «&».

    Переменные окружения, которые не зависят от типа запроса:
    SERVER_SOFTWARE – показывает название и версию http-сервера в формате: название/версия.
    SERVER_NAME – показывает доменное имя сервера.
    SERVER_ADDR – показывает IP сервера.
    SERVER_ADMIN – e-mail администратора web-сервера.
    GATEWAY_INTERFACE – версия CGI на момент компиляции httpd демона в формате: CGI/версия
    DATE_GMT – текущая дата и время во временной зоне GMT.
    DATE_LOCAL – текущие дата и врем во временной зоне сервера.
    DOCUMENT_ROOT – путь к главному каталогу web-сервера.
    Переменные окружения, которые зависят от типа запроса:
    SERVER_PROTOCOL – протокол, по которому был получен запрос.
    SERVER_PORT – порт, на который был получен запрос.
    REQUEST_METHOD – тип запроса: POST, GET и так далее.
    REQUEST_URL – страница, отправившая запрос.
    SCRIPT_NAME – URL скрипта без имени сервера.
    SCRIPT_FILENAME – полное имя файла скрипта на диске.
    QUERY_STRING – информация, содержащаяся в командной строке вызова скрипта (после ? в URL’е).
    CONTENT_TYPE – MIME-тип данных, передаваемых скрипту.
    CONTENE_LENGTH – длина передаваемых данных.

    Поток стандартного вывода:

    Ввод данных в скрипт через поток стандартного ввода осуществляется только при использовании метода доступа к ресурсу (к скрипту) POST. При этом в переменную окружения CONTENT_LENGTH помещается число символов, которое необходимо считать из потока стандартного ввода скрипта, а в переменную окружения CONTENT_TYPE помещается тип кодирования данных, которые считывают из потока стандартного ввода. При посимвольном считывании в С можно применить, например, такой фрагмент кода:

    4) Методы передачи данных
    a) Метод GET выполняет передачу данных CGI-программе через переменные окружения (среды), которые фактически добавляются к URL через разделительный знак ?.

    Прежде всего, для этих целей используется переменная query_string – длинная строка, состоящая из пар имя = значение, отделяемых друг от друга символом амперсанда — &. Получается быстро, однако объем передаваемых данных не превышает 256?1024 байт в зависимости от типа Web-сервера.

    b) Метод POST выполняет передачу данных через стандартный поток ввода stdin (Ini-файл для WinCGI). Фактически данные добавляются к телу HTML-запроса. Количество передаваемых байт указывается в переменной среды content_length. Это более медленный способ передачи данных, но объем передаваемых данных не ограничен.

    c) Параметр HREF тэга A
    Помимо методов GET и POST тэга

    Windows CGI интерфейс

    The element configures default settings for Common Gateway Interface (CGI) applications for Internet Information Services (IIS) 7. These settings define the environment that IIS 7 will use when launching CGI processes. For example, the createCGIWithNewConsole and createProcessAsUser attributes specify how IIS 7 will launch a CGI application, and the timeout attribute specifies how long IIS will let a CGI application run before terminating the process.

    CGI is sometimes considered to be a legacy application environment. Because of the processing overhead that is associated with launching CGI applications as separate processes, technologies like HTTP Modules, ISAPI extensions, ASP/ASP.NET, and FastCGI are preferred over CGI for application development.

    The CGI environment is not installed by default; however, installing the CGI environment also installs the necessary functionality for using FastCGI applications. For more information about using FastCGI on IIS 7, see the element.

    Compatibility

    Version Notes
    IIS 10.0 The element was not modified in IIS 10.0.
    IIS 8.5 The element was not modified in IIS 8.5.
    IIS 8.0 The element was not modified in IIS 8.0.
    IIS 7.5 The element was not modified in IIS 7.5.
    IIS 7.0 The element was introduced in IIS 7.0.
    IIS 6.0 The attributes for the element replaces the IIS 6.0 following metabase properties: CreateProcessAsUser, CreateCGIWithNewConsole, and CGITimeout.

    Setup

    The element is not included in the default installation of IIS 7 and later.To use the CGI environment, you must first install the CGI role service. The installation process registers the Common Gateway Interface (CGI) role service in both the and element.

    Windows Server 2012 or Windows Server 2012 R2

    1. On the taskbar, click Server Manager.
    2. In Server Manager, click the Manage menu, and then click Add Roles and Features.
    3. In the Add Roles and Features wizard, click Next. Select the installation type and click Next. Select the destination server and click Next.
    4. On the Server Roles page, expand Web Server (IIS), expand Web Server, expand Application Development, and then select CGI. Click Next.
      .
    5. On the Select Features page, click Next.
    6. On the Confirm installation selections page, click Install.
    7. On the Results page, click Close.

    Windows 8 or Windows 8.1

    1. On the Start screen, move the pointer all the way to the lower left corner, right-click the Start button, and then click Control Panel.
    2. In Control Panel, click Programs and Features, and then click Turn Windows features on or off.
    3. Expand Internet Information Services, expand World Wide Web Services, expand Application Development Features, and then select CGI.
    4. Click OK.
    5. Click Close.

    Windows Server 2008 or Windows Server 2008 R2

    1. On the taskbar, click Start, point to Administrative Tools, and then click Server Manager.
    2. In the Server Manager hierarchy pane, expand Roles, and then click Web Server (IIS).
    3. In the Web Server (IIS) pane, scroll to the Role Services section, and then click Add Role Services.
    4. On the Select Role Services page of the Add Role Services Wizard, select CGI, and then click Next.
    5. On the Confirm Installation Selections page, click Install.
    6. On the Results page, click Close.

    Windows Vista or Windows 7


    1. On the taskbar, click Start, and then click Control Panel.
    2. In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.
    3. Expand Internet Information Services, then select CGI, and then click OK.

    How To

    How to configure CGI settings for a site

    Open Internet Information Services (IIS) Manager:

    If you are using Windows Server 2012 or Windows Server 2012 R2:

    • On the taskbar, click Server Manager, click Tools, and then click Internet Information Services (IIS) Manager.

    If you are using Windows 8 or Windows 8.1:

    • Hold down the Windows key, press the letter X, and then click Control Panel.
    • Click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.

    If you are using Windows Server 2008 or Windows Server 2008 R2:

    • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.

    If you are using Windows Vista or Windows 7:

    • On the taskbar, click Start, and then click Control Panel.
    • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  • In the Connections pane, expand the server name, expand Sites, and then navigate to the Web site or Web application that you want to configure.
  • In the site or application Home pane, double-click CGI.
  • In the CGI pane, configure the required settings, and then click Apply in the Actions pane.
  • Configuration

    Attributes

    Attribute Description
    createCGIWithNewConsole Optional Boolean attribute.

    Specifies whether a CGI application runs in its own console.

    Note: If the value is set to true, each CGI application creates a new console when the application is started. A value of false indicates that CGI applications should run without a console.

    The default value is false .

    createProcessAsUser Optional Boolean attribute.

    Specifies whether a CGI process is created in the system context or in the context of the requesting user.

    The default value is true .

    timeout Optional timeSpan attribute.

    Specifies the time-out for a CGI application.

    The default value is 00:15:00 (15 minutes)

    Child Elements

    Configuration Sample

    The following configuration sample specifies that each CGI application creates a new console when the application starts, that CGI processes be created in the context of the requesting user, and that the time-out for CGI applications is 20 minutes.

    Sample Code

    The following code samples specify that each CGI application creates a new console when the application starts, that CGI processes be created in the context of the requesting user, and that the time-out for CGI applications is 20 minutes

    Windows CGI интерфейс

    Программирование с использованием CGI

    Включение раздела о CGI в книгу по базам данных может показаться столь же странным, как если бы в кулинарную книгу была включена глава о ремонте автомобилей. Разумеется, для того чтобы съездить в магазин за продуктами, нужен исправный автомобиль, но уместно ли об этом говорить? Полное изложение CGI и веб-программирование в целом выходят за рамки данной книги, но краткого введения в эти темы достаточно для того, чтобы расширить возможности MySQL и mSQL по представлению данных в царстве Web.

    В основном эта глава предназначена тем, кто изучает базы данных, но не прочь приобрести некоторые знания и в программировании для Web. Если ваша фамилия Бернерс-Ли или Андрессен, вряд ли вы найдете здесь то, чего еще не знаете. Но даже если вы не новичок в CGI, наличие под рукой краткого справочника во время погружения в тайны MySQL и mSQL может оказаться весьма полезным.

    Как и большинство акронимов, Common Gateway Interface (CGI — общий шлюзовый интерфейс) мало что говорит по сути. Интерфейс с чем? Где этот шлюз? О какой общности речь? Чтобы ответить на эти вопросы, вернемся немного назад и бросим взгляд на WWW в целом.


    Тим Бернерс-Ли, физик, работавший в CERN, придумал Web в 1990 году, хотя план возник еще в 1988. Идея состояла в том, чтобы дать исследователям в области физики элементарных частиц возможность легко и быстро обмениваться мультимедийными данными — текстом, изображениями и звуком — через Интернет. WWW состояла из трех основных частей: HTML, URL и HTTP. HTML — язык форматирования, используемый для представления содержания в Web. URL — это адрес, используемый для получения содержимого в формате HTML (или каком-либо ином) с веб-сервера. И, наконец, HTTP — это язык, который понятен веб-серверу и позволяет клиентам запрашивать у сервера документы.

    Возможность пересылки через Интернет информации всех типов явилась революцией, но вскоре была обнаружена и другая возможность. Если можно переслать через Web любой текст, то почему нельзя переслать текст, созданный программой, а не взятый из готового файла? При этом открывается море возможностей. Простой пример: можно использовать программу, выводящую текущее время, так, чтобы читатель видел правильное время при каждом просмотре страницы. Несколько умных голов в National Center for Supercomputing Applications (Национальный центр разработки приложений для суперкомпьютеров -NCSA), которые создавали веб-сервер, такую возможность увидели, и вскоре появился CGI.

    CGI — это набор правил, согласно которым программы на сервере могут через веб-сервер посылать данные клиентам. Спецификация CGI сопровождалась изменениями в HTML и HTTP, вводившими новую характеристику, известную как формы.

    Если CGI позволяет программам посылать данные клиенту, то формы расширяют эту возможность, позволяя клиенту посылать данные для этой CGI-программы. Теперь пользователь может не только видеть текущее время, но и устанавливать часы! Формы CGI открыли дверь для подлинной интерактивности в мире Web. Распространенные приложения CGI включают в себя:

    • Динамический HTML. Целые сайты могут генерироваться одной CGI-программой.
    • Поисковые механизмы, находящие документы с заданными пользователем словами.
    • Гостевые книги и доски объявлений, в которые пользователи могут добавлять свои сообщения.
    • Бланки заказов.
    • Анкеты.
    • Извлечение информации из размещенной на сервере базы данных.

    В последующих главах мы обсудим все эти CGI-приложения, а также и некоторые другие. Все они дают прекрасную возможность соединения CGI с базой данных, что и интересует нас в этом разделе.

    Прежде чем изучать особенности CGI, полезно рассмотреть наиболее часто встречающийся способ, с помощью которого конечные пользователи получают интерфейс к CGI-программам: формы HTML. Формы являются частью языка HTML, предоставляющей конечному пользователю поля различных типов. Данные, вводимые в поля, могут быть пересланы веб-серверу. Поля могут служить для ввода текста или являться кнопками, которые пользователь может нажать или отметить галочкой. Вот пример страницы HTML, содержащей форму:

    Сетевые интерфейсы в Windows [GUI/CMD/PowerShell]

    В этой статье мы рассмотрим, настройку сетевых интерфейсов в Windows, а именно получение динамических сетевых настроек[по DHCP] и задание/смену статических сетевых настроек[вручную], тремя способами — в графическом интерфейсе[GUI], в командной строке[CMD] и средствами PowerShell.

    Моя локальная сеть:

    • Доступные IP-адреса: 10.0.0.1 — 10.0.0.254
    • Маска подсети: 255.255.255.0
    • Шлюз по умолчанию: 10.0.0.1
    • DNS-сервер: 10.0.0.1

    В моей сети работает DHCP-сервер, с представленной ниже конфигурацией:

    • Диапазон выдаваемых адресов: 10.0.0.50 — 10.0.0.254
    • Маска подсети: 255.255.255.0
    • Шлюз по умолчанию: 10.0.0.1
    • DHCP-сервер: 10.0.0.1
    • DNS-серверы: 8.8.8.8, 8.8.4.4

    Для разнообразия взял разные DNS-сервера.

    1. — Настройка сетевого интерфейса через графический интерфейс [GUI]

    Первым делом нам нужно попасть в «Центр управления сетями и общим доступом«.

    Я привожу два универсальных способа, как в него попасть, используя операционные системы: Windows 7, 8, 8.1, 10, Server 2008, 2012, 2020.

    Первый способ: Заходим в «Панель управления» -> «Центр управления сетями и общим доступом«.(Рис.1.1)

    «Центр управления сетями и общим доступом»» w /> Рис.1.1 — «Панель управления» — «Центр управления сетями и общим доступом».

    Второй способ: через «Выполнить«:

    Заходим в «Выполнить«[Win+R] -> Вводим команду приведённую ниже и жмём — «OK«.(Рис.1.2)

    Рис.1.2 — Запуск «Центра управления сетями и общим доступом» через «Выполнить».

    И так, перед нами «Центр управления сетями и общим доступом«. В разделе «Просмотр активных сетей» мы видим сети, к которым подключен наш ПК.

    На данный момент мой ПК подключен к одной сети. Для того чтобы перейти к параметрам соединения, в строке «Подключение:» нажмите на тип подключения, в моём случае это «Ethernet» [При подключении по Wi-FI надпись будет — «Беспроводное сетевое соединение (название сети)«](Рис.1.3)

    Рис.1.3 — Центр управления сетями и общим доступом.

    Откроется окно — «Состояние — Ethernet«, показывающее состояние подключения к сети. Нас интересует кнопка «Свойства«, нажимаем её -> открывается окно «Ethernet: свойства» в списке компонентов выбираем «IP версии 4 (TCP/IPv4)» и опять же жмём кнопку «Свойства«.(Рис.1.4)

    Откроется окно — «Свойства: IP версии 4 (TCP/IPv4)«, оно то нам и нужно.(Рис.1.5)

    Рис.1.4 — «Состояние — Ethernet» и «Ethernet: свойства».

    1.1. — GUI — Получение динамического IP-адреса [Автоматически по DHCP]

    Перед нами окно — «Свойства: IP версии 4 (TCP/IPv4)«.(Рис.1.5)

    Для того чтобы получить динамические [автоматически по DHCP] настройки сети, а именно — IP-адрес, Маску подсети, Основной шлюз и DNS-серверы, нужно переключить радиокнопки в положения:

    • Получить IP-адрес, автоматически
    • Получить адрес DNS-сервера автоматически

    В окне «Свойства: IP версии 4 (TCP/IPv4)» нажимаем «ОК«.

    Рис.1.5 — Положения радиокнопок для получения сетевых настроек автоматически.

    В окне «Ethernet: свойства» тоже нажимаем «ОК«.(Рис.1.6)

    Рис.1.6 — «Ethernet: свойства».

    Перед нами окно «Состояние — Ethernet» -> нажимаем кнопку «Сведения. » -> откроется окно «Сведения о сетевом подключении«, в котором мы можем посмотреть настройки сети.(Рис.1.7)

    • DHCP включен: Да
    • Адрес IPv4: 10.0.0.50
    • Маска подсети IPv4: 255.255.255.0
    • Шлюз по умолчанию IP: 10.0.0.1
    • DHCP-сервер IPv4: 10.0.0.1
    • DNS-серверы IPv4: 8.8.8.8, 8.8.4.4

    Настройки по DHCP получены, всё правильно, на этом с получением динамических сетевых настроек заканчиваем.

    Рис.1.7 — Просматриваем настройки сети полученные по DHCP.

    1.2. — GUI — Задать/Изменить статический IP-адрес [Указание IP-адреса вручную]

    Статические настройки сети задаются вручную пользователем. Они прописываются в настройках сетевого подключения и жестко закрепляется за данным устройством.


    В этом разделе, для моего ПК я пропишу статический IP-адрес10.0.0.10

    Перед нами окно — «Свойства: IP версии 4 (TCP/IPv4)«.(Рис.1.8)

    Для того чтобы задать/изменить статические настройки сети [Указать IP-адрес и DNS-серверы вручную], нужно переключить радиокнопки в положения:

    • Использовать следующий IP-адрес
    • Использовать следующие адреса DNS-серверов
    • IP-адрес: 10.0.0.10
    • Маска подсети: 255.255.255.0
    • Основной шлюз: 10.0.0.1
    • Предпочитаемый DNS-сервер: 10.0.0.1
    • Альтернативный DNS-сервер: оставляю пустым

    Для сохранения нажимаем «ОК«.

    Рис.1.8 — Вводим сетевые настройки вручную.

    В окне «Ethernet: свойства» тоже нажимаем «ОК«.(Рис.1.9)

    Рис.1.9 — «Ethernet: свойства».

    Перед нами окно «Состояние — Ethernet«(Рис.1.10) -> нажимаем кнопку «Сведения. » откроется окно «Сведения о сетевом подключении«, в котором мы можем посмотреть настройки сети.

    • DHCP включен: Нет
    • Адрес IPv4: 10.0.0.10
    • Маска подсети IPv4: 255.255.255.0
    • Шлюз по умолчанию IP: 10.0.0.1
    • DNS-серверы IPv4: 10.0.0.1

    Нужные нам сетевые настройки применились. Всё отлично.

    Рис.1.10 — Просматриваем настройки сети введенные вручную.

    На этом с настройкой сети через графический интерфейс[GUI] заканчиваем.

    2. — Настройка сетевого интерфейса через командную строку [CMD]

    Для начала нам необходимо запустить командную строку с правами администратора, для этого выполните действия -> Заходим в «Выполнить«[Win+R] -> Вписываем — cmd -> Нажимаем на клавиатуре сочетание клавиш «CTRL«+»SHIFT«+»ENTER«. Всё! Приступаем.

    И так на данный момент настройки сети на моём ПК прописаны вручную[Статические].

    Убедимся в этом набрав в командной строке [CMD] команду — ipconfig /all (Рис.2.1):

    • Адаптер Ethernet Ethernet:
    • DHCP включен. Нет [Речь идёт о DHCP-клиенте, и он выключен, а значит сетевые настройки прописаны вручную]
    • IPv4-адрес. 10.0.0.10(Основной)
    • Основной шлюз. 10.0.0.1
    • DNS-серверы. 10.0.0.1

    Рис.2.1 — Вывод команды ipconfig /all.

    Как-то не очень понятно в моём случае, название адаптера — «Адаптер Ethernet Ethernet:«, поэтому я решил воспользоваться другой командой, которая покажет мне имя интерфейса и его состояние(Рис.2.2):

    Ну вот. уже лучше — У меня есть интерфейс «Ethernet» в состоянии «Подключен«[connected].

    Рис.2.2 — Имя интерфейса и заодно его состояние.

    Если у вас сетевой интерфейс отключен и вы хотите его включить, то воспользуйтесь командой:

    В моём случае команда выглядела бы так:

    Ну а если на этом этапе, вы захотите выключить какой-нибудь сетевой интерфейс, то воспользуйтесь командой:

    2.1. — CMD — Получение динамического IP-адреса [Автоматически по DHCP]

    Для того чтобы получить — IP-адрес, Маску подсети и Основной шлюз[Здесь отсутствует DNS-сервер] от DHCP-сервера, воспользуемся командой:

    В моём случае так(Рис.2.3):

    Рис.2.3 — Команда для получения: IP-адреса, Маски подсети и Основного шлюза по DHCP.

    Проверим, какие сетевые настройки, наш ПК получил по DHCP, командой — ipconfig /all.(Рис.2.4)

    • Адаптер Ethernet Ethernet:
    • DHCP включен. да [Речь идёт о DHCP-клиенте, и он включен]
    • IPv4-адрес. 10.0.0.50(Основной) [Первый адрес из диапазона IP-адресов выдаваемых по DHCP]
    • Основной шлюз. 10.0.0.1
    • DNS-серверы. 10.0.0.1 [Остался старый, прописанный вручную, всё так и должно быть..]

    Рис.2.4 — Вывод команды ipconfig /all.

    Теперь наша задача по DHCP, получить адрес(а) DNS-сервера(ов).

    Для этого воспользуемся командой:

    В моём случае так (Рис.2.5):

    Рис.2.5 — Получение адреса DNS-сервера по DHCP.

    Проверяем, командой — ipconfig /all, полученный по DHCP, адрес(а) DNS-сервера(ов):

    Всё отлично! По DHCP получены адреса DNS-серверов: 8.8.8.8 и 8.8.4.4 (Рис.2.6)

    Рис.2.6 — Вывод команды ipconfig /all. Проверяем полученные адреса DNS-серверов.

    2.2. — CMD — Задать/Изменить статический IP-адрес [Указание IP-адреса вручную]

    В этом разделе, для моего ПК я пропишу статический IP-адрес10.0.0.5

    Для того чтобы вручную назначить/изменитьIP-адрес, Маску подсети и Основной шлюз[Здесь отсутствует DNS-сервер], воспользуемся командой:


    В моём случае это выглядит так(Рис.2.7):

    Рис.2.7 — Вручную назначаем: IP-адрес, Маску подсети и Основной шлюз.

    После ввода команды, сеть будет работать некорректно, так как полученные ранее, по DHCP, адреса DNS-серверов пропадут из конфигурации сети, и нам нужно их прописать вручную.

    Указание/Смена Предпочитаемого DNS-сервера[При смене предпочитаемого сервера, пропадут альтернативные]:

    В моём случае так(Рис.2.8):

    Рис.2.8 — Указание Предпочитаемого DNS-сервера.

    Для корректной работы сети обычно требуется указать адрес одного DNS-сервера, в некоторых случаях требуется указать два, но я, в целях тестирования, укажу 3.

    Указание Альтернативного DNS-сервера:

    В моём случае так(Рис.2.9):

    Рис.2.9 — Указание Альтернативного DNS-сервера

    Указание Третьего DNS-сервера:

    Добавляем точно так же, как и второй. В моём случае так(Рис.2.10):

    Рис.2.10 — Указание Третьего DNS-сервера

    Если кто-то ошибся с вводом адреса DNS-сервера, то удалить его можно командой:

    И так проверяем, что у нас в итоге получилось командой — ipconfig /all.(Рис.2.11)

    • Адаптер Ethernet Ethernet:
    • DHCP включен. Нет [Речь идёт о DHCP-клиенте, и он выключен]
    • IPv4-адрес. 10.0.0.5(Основной)
    • Основной шлюз. 10.0.0.1
    • DNS-серверы. 8.8.8.8, 8.8.4.4, 10.0.0.1

    Нужные нам сетевые настройки применились. Всё отлично.

    Рис.2.11 — Вывод команды ipconfig /all. Проверяем прописанные вручную, через командную строку, настройки сети.

    На этом с настройкой сети через командную строку[CMD] заканчиваем.

    2.3. — CMD — Сохранение/Восстановление [Backup/Restore] сетевых настроек

    [ВНИМАНИЕ. ]

    Лично у меня этот способ не сработал на Windows 10 и Windows Server 2020, но я много где видел, что этот способ советовали людям и он их устраивал.

    И я не рекомендую повторять этот пункт пользователям, которые не помнят свои сетевые настройки. [Если есть сеть, то она пропадёт]

    В общем проблема в том, что восстанавливается IP-адрес и Маска подсети, остальные настройки не восстанавливаются. Я не знаю как решить эту проблему, не покидая CMD. Если у вас есть какие-либо решения этой проблемы, не ленитесь и напишите в комментариях.

    Если вдруг вы попробовали данный способ сохранить/восстановить сетевые настройки, и у вас он сработал, то напишите в комментариях — на какой версии Windows вы пробовали ��

    [/ВНИМАНИЕ. ]

    Команда для сохранения сетевых настроек в файл C:\netconfig.txt (Рис.2.12):

    Рис.2.12 — Сохраняем сетевые настройки в файл C:\netconfig.txt

    Файл с сохранённой конфигурацией сетевых настроек — C:\netconfig.txt, выглядит примерно так (Рис.2.13):

    Рис.2.13 — Вид файла с сохранённой конфигурацией сетевых настроек.

    Команда для восстановления сетевых настроек из файла C:\netconfig.txt (Рис.2.14):

    Рис.2.14 — Восстановление сетевые настроек из файла C:\netconfig.txt.

    И вот такой меня ожидал результат восстановления сетевых настроек.(Рис.2.15)

    Как видим не восстановились адреса Основного шлюза и DNS-серверов.

    Рис.2.15 — Результат восстановления сетевых настроек.

    Ну и глянем в — ipconfig /all.(Рис.2.16)

    Рис.2.16 — Результат восстановления сетевых настроек.

    2.4. — CMD — Полезные команды для настройки сети

    Информация и состояние:

    Просмотр конфигурации сетевых интерфейсов:

    Просмотр названия и состояния сетевых интерфейсов:

    Просмотр адресов DNS-серверов:

    Вкл/Выкл:

    Включение сетевого интерфейса:

    Выключение сетевого интерфейса:


    По DHCP[Динамически]:

    Получение IP-адреса, Маски подсети и Основного шлюза по DHCP:

    Получить адрес DNS-сервера по DHCP:

    Вручную[Статически]:

    Вручную назначить/изменить IP-адрес, Маску подсети и Основной шлюз:

    Вручную назначить/изменить адрес Предпочитаемого DNS-сервера:

    Вручную добавить адрес Альтернативного DNS-сервера:

    3. — Настройка сетевого интерфейса [PowerShell]

    Для начала нам необходимо запустить PowerShell с правами администратора, для этого выполните действия -> Заходим в «Выполнить«[Win+R] -> Вписываем — powershell -> Нажимаем на клавиатуре сочетание клавиш «CTRL«+»SHIFT«+»ENTER«. Всё!

    Посмотреть список сетевых командлетов можно с помощью команды:

    Для того чтобы почитать помощь по командлетам воспользуйтесь командой:

    Так же можно посмотреть примеры использования команд:

    И так, на данный момент настройки сети на моём ПК прописаны вручную[Статические].

    Проверим это, и заодно посмотрим необходимые для дальнейшей работы параметры, при помощи командлета — Get-NetIPConfiguration (Рис.3.1):

    • InterfaceAlias: Ethernet [Name][Название сетевого интерфейса]
    • InterfaceIndex: 9 [Индекс интерфейса]
    • NetAdapter.Status: Up [UP — Интерфейс включен, DOWN — выключен]
    • IPv4Address: 10.0.0.10 [IP-адрес]
    • IPv4DefaultGateway: 10.0.0.1 [Основной шлюз]
    • NetIPv4Interface.DHCP: Disabled [Речь идёт о DHCP-клиенте, и он выключен, а значит сетевые настройки вписаны вручную]
    • DNSServer: 10.0.0.1 [DNS-серверы]

    Логично что, при конфигурировании интерфейса, нужно указывать какой именно интерфейс мы конфигурируем, так вот — в команде можно указывать — Название интерфейса[-InterfaceAlias » ИМЯ_ИНТЕРФЕЙСА «] или Индекс интерфейса [-InterfaceIndex ИНДЕКС ].

    Рис.3.1 — Проверяем настройки сети.

    Для того чтобы узнать InterfaceAlias[Name] или InterfaceIndex[ifIndex], нет необходимости смотреть сетевые настройки, можно просто вывести краткую информацию об интерфейсе с помощью командлета — Get-NetAdapter , так же тут мы увидим — InterfaceDescription[Описание интерфейса], Status[Статус интерфейса], MacAddress[MAC-адрес] и LinkSpeed[Скорость соединения].(Рис.3.2)

    Повторюсь — Для дальнейшей работы нам понадобится: InterfaceAlias[Name] или InterfaceIndex[ifIndex].

    В моём случае InterfaceAlias[Name]Ethernet , а InterfaceIndex[ifIndex]9 .

    Рис.3.2 — Информация об интерфейсе.

    Если у вас сетевой интерфейс отключен и вы хотите его включить, то воспользуйтесь командой:

    В моём случае команда выглядела бы так:

    Ну а если на этом этапе вы захотите выключить какой-нибудь сетевой интерфейс, то воспользуйтесь командой:

    Далее, в этой статье я почти везде использовал — [-InterfaceAlias » ИМЯ_ИНТЕРФЕЙСА «].

    Если у вас имя интерфейса неудобное, то интерфейс можно переименовать [к примеру в LAN или WAN], командой:

    3.1. — PowerShell — Получение динамического IP-адреса [Автоматически по DHCP]

    Для того чтобы получить IP-адрес, Маску подсети и Основной шлюз от DHCP-сервера[Здесь отсутствует DNS-сервер], воспользуемся командой:

    Лично у меня, интерфейс увидел DHCP-сервер только после рестарта интерфейса:

    В моём случае так:

    Проверим, какие сетевые настройки, наш ПК получил по DHCP.(Рис.3.3)

    • InterfaceAlias: Ethernet [Name][Название сетевого интерфейса]
    • IPv4Address : 10.0.0.52 [IP-адрес]
    • IPv4DefaultGateway: 10.0.0.1 [Основной шлюз]
    • NetIPv4Interface.DHCP: Enabled [Речь идёт о DHCP-клиенте, и он включен]
    • DNSServer: 10.0.0.1 [DNS-сервер, остался старый, прописанный вручную, всё так и должно быть..]

    Рис.3.3 — Получаем сетевые настройки по DHCP. Смотрим сетевые настройки.

    Теперь наша задача по DHCP, получить адрес(а) DNS-сервера(ов).

    Для этого воспользуемся командой:

    В моём случае так (Рис.3.4):

    Проверяем, полученные по DHCP, адрес(а) DNS-сервера(ов):

    Всё отлично! По DHCP получены адреса DNS-серверов: 8.8.8.8 и 8.8.4.4

    Рис.3.4 — Получаем по DHCP адреса DNS-серверов, проверяем.

    3.2. — PowerShell — Задать статический IP-адрес [Указание IP-адреса вручную]

    В этом разделе, для моего ПК я пропишу статический IP-адрес10.0.0.10

    Если у вас прописан статический IP-адрес, то во избежание ошибок для начала нужно удалить его, а так же удалить адрес Основного шлюза [Адрес(а) DNS-сервер(ов) можно не удалять].

    Не знаю правильно это или неправильно, но это работает. Есть, конечно, командлет Set-NetIPAddress , для смены IP-адреса, но когда я пытался им воспользоваться — одни ошибки. ��

    Если на данный момент настройки сети получены по DHCP, то пропускайте удаление.

    Если адреса не знаете, то смотрим, запоминаем, вставляем в команды:

    Данная команда удалит IP-адрес и Маску подсети:

    Следующая команда удалит адрес Основного шлюза:

    Удалить все адреса DNS-серверов:

    А теперь приступаем.

    Для того чтобы вручную назначитьIP-адрес, Маску подсети и Основной шлюз[Здесь отсутствует DNS-сервер], воспользуемся командлетом New-NetIPAddress :

    В моём случае так(Рис.3.5):

    Рис.3.5 — Назначаем статически IP-адрес, Маску подсети и Основной шлюз.

    После ввода команды, сеть будет работать некорректно, так как полученные ранее, по DHCP, адреса DNS-серверов пропадут из настроек сети, и нам нужно их прописать вручную.

    Указание адрес(а) DNS-сервера(ов):

    В моём случае так(Рис.3.6):

    Проверяем, прописанные адрес(а) DNS-сервера(ов):

    Всё отлично! Адреса DNS-серверов: 10.0.0.1 и 8.8.8.8

    Рис.3.6 — Назначаем статически адреса DNS-серверов, проверяем.

    Удалить один из адресов DNS-серверов нельзя[Но это неточно �� ], для начала нужно сбросить все адреса DNS-серверов, а потом уже прописать новые.

    Удалить[Сбросить] все адреса DNS-серверов:

    3.3. — PowerShell — Полезные команды для настройки сети

    Информация и состояние:

    Просмотр конфигурации сетевых интерфейсов:

    Информация о сетевых интерфейсах — InterfaceAlias[Имя], InterfaceIndex[Индекс], InterfaceDescription[Описание интерфейса], Status[Статус интерфейса], MacAddress[MAC-адрес] и LinkSpeed[Скорость соединения]:

    Вкл/Выкл/Рестарт:

    Включение сетевого интерфейса:

    Выключение сетевого интерфейса:

    Рестарт сетевого интерфейса:

    По DHCP[Динамически]:

    Получение IP-адреса, Маски подсети и Основного шлюза по DHCP:

    Сбросить и Получить адреса DNS-серверов по DHCP:

    Вручную[Статически]:

    Удалить IP-адрес и Маску подсети:

    Удалить адрес Основного шлюза:

    Вручную назначить IP-адрес, Маску подсети и Основной шлюз:

    Вручную назначить/изменить адреса DNS-серверов:

    Удалить[Сбросить] все адреса DNS-серверов:

    Мастер Йода рекомендует:  10 распространенных ошибок веб-разработчиков
    Добавить комментарий