22 июл. 2009 г.

Тест на знание истории персональных компьютеров

По негласному стандарту, в каждом блоге должны быть тесты. Теперь будет и моем :)
Предлагаю вам тест на знание истории IBM PC. Хорошо ли вы помните те времена, когда компьютеры были медленными, программы маленькими, а первый Doom считался игрой с потрясающей графикой?

Примечание: там, где ответ нужно ввести текстом, следует вводить только цифры.

Реализован на JavaScript, поэтому результат нигде не хранится. По желанию читателей могу это реализовать.

  1. В каком году появился IBM PC? (в формате 19XX)

  2. Какой процессор был первым 32-х разрядным процессором архитектуры x86?

    8088
    80386
    4004
    80286
  3. Сколько килобайт памяти должно хватить всем?

  4. Как назывался файл стандартной командной оболочки MS-DOS?

    msdos.sys
    io.sys
    command.com
  5. Какой из этих типов видеокарт является исторически первым?

    VGA
    EGA
    CGA
    HGC (Hercules)
  6. 2400, 9600, 14400, 19200... Какой еще вариант был?

    28800
    36000
    20900
  7. Каким был номер прерывания MS-DOS, применявшегося для системных вызовов?

    10h
    21h
    80h
  8. Каким был номер модели математического сопроцессора для процессора 80286? (целиком, в таком же формате как модель процессора). Имеется в виду Intel, не Weitek.


  9. Здесь есть лишнее. Укажите его.

    ISA
    EISA
    MCA
    LPT
  10. В последние годы существования DOS были распространены программы, в состав которых входил файл оверлея (.ovl). Для чего он нужен?

    Он содержал справку по программе.
    В нем хранились настройки программы.
    В нем хранилась часть программы, загружаемая после выполнения основного исполняемого файла.
  11. Каков был диаметр первых дискет?

    5.25"
    8"
    3.5"
  12. Какова была максимальная емкость 3.5" дискет?

    1.2 Мбайт
    1.44 Мбайт
    2.88 Мбайт
  13. Какая версия Windows, поставлявшаяся отдельно от MS-DOS, была последней?

    3.5
    3.11
    2.0
  14. Какая из этих операционных систем не имеет версии для IBM-совместимых компьютеров?

    OS/2
    XENIX
    HP-UX
  15. Какой из этих процессоров был последним, имевшим вариант без математического сопроцессора?

    80286
    80386
    80486
  16. Для чего применялся символ @ перед командой в пакетном (.bat) файле DOS? (например, @format c:)

    Для подавления вывода на экран сообщений команды.
    Для подавления вывода на экран самой команды.
    Это был символ комментария.
  17. Пусть в каталоге C:\directory есть файлы file.exe, file.bat и file.com. Если набрать команду c:\directory>file, какой из них будет выполнен?

    file.exe
    file.bat
    file.com
  18. Каков максимальный размер исполняемого файла в формате COM в килобайтах?

  19. У трехдюймовых дискет в нижней части было окошко, которое можно было закрыть или открыть (у пятидюймовых — прорезь, которую можно заклеить). Для чего оно было нужно?

    Для явного указания емкости дискеты.
    Для указания типа файловой системы дискеты.
    Чтобы разрешить или запретить запись на дискету.
  20. Некогда был вирус под названием OneHalf. Почему он так назывался?

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

Полный текст сообщения

21 июл. 2009 г.

Вышел первый номер журнала «Практика функционального программирования»

Недавно вышел первый номер журнала «Практика функционального программирования». Это журнал о функциональном программировании, свободно распространяемый через Интернет под лицензией Creative Commons Attribution-Noncommercial-No derivatives (т.е. можно распространять со ссылкой на авторов, с некоммерческой целью, и нельзя делать производные работы).

Номер посвящен преимущественно философии функционального подхода и ряду примеров реальных программ на языке Haskell. Качество статей весьма достойное, хотя в них могут встречаться мелкие неточности и опечатки.

На мой взгляд, авторы делают очень хорошее и нужное дело, потому как функциональный подход может сильно помочь в написании надежных и элегантных программ. В качестве примеров больших и сложных систем, написанных на таких языках можно привести систему компьютерной алгебры Maxima (на Lisp) и прошивку для ATM-коммутаторов фирмы Ericsson (на Erlang).

Многие объектно-ориентированные языки, такие как Python и языки платформы .Net начали включать в себя элементы функционального программирования.

В общем, читайте и проникайтесь красотой подхода :)

Ссылки


Полный текст сообщения

14 июл. 2009 г.

Используемые мной программы

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

Большинство из них были результатом осознанного выбора и поиска, в этом случае я указал аргументы в их пользу. Впрочем, выбор всегда субъективен.

Список неполный, в будущем может быть дополню и добавлю скриншоты.

А теперь будет длинный список.

Рабочая среда

Операционная система: openSuSE Linux.
Лицензия: разнообразные.
Где взять: opensuse.org
Причина выбора: стабильность, большое количество доступных пакетов, баланс между свежестью версий и стабильностью софта.

Оконный менеджер: Fluxbox.
Лицензия: MIT.
Где взять: fluxbox.org
Причиная выбора: нетребователен к ресурсам, гибкость настройки, удобство управления.
Версия под Windows: нет, и не планируется.

Командная оболочка: Z shell.
Лицензия: BSD-подобная.
Где взять: www.zsh.org
Причины выбора: гибкость настройки, очень (нет, серьезно) удобное автодополнение, богатые возможности языка сценариев.
Версия под Windows: нет, и не планируется.

Файловый менеджер: Midnight commander.
Лицензия: GNU GPL
Где взять: http://www.midnight-commander.org/
Причина выбора: текстовый интерфейс, удобство, распространенность.
Версия под Windows: есть, но бессмысленно.

Текстовый редактор: ViM.
Лицензия: GPL-совместимая.
Где взять: www.vim.org
Причины выбора: удобство использования, отличная функциональность.
Версия под Windows: есть.

Эмулятор терминала: gnome-terminal.
Лицензия: GNU GPL.
Где взять: входит в состав GNOME, gnome.org.
Причины выбора: привычка.
Версия под Windows: нет, и не планируется.

Подготовка документов:

Издательская система: LaTeX.
Лицензия: latex public license.
Где взять: http://www.tug.org/texlive/.
Причины выбора: высокое качество выходных документов, расширяемость, текстовый формат исходных файлов.
Версия под Windows: есть.

Офисный пакет: Open Office.
Лицензия: LGPL.
Где взять: openoffice.org.
Причины выбора: достойных альтернатив все равно нет :)
Версия под Windows: есть.

Графика:

Растровый редактор: GIMP.
Лицензия: GNU GPL. Где взять: gimp.org .
Причины выбора: привычка, при моих минимальных навыках в этой области любой редактор сгодится.
Версия под Windows: есть.

Векторный редактор: InkScape.
Лицензия: GNU GPL. Где взять: inkscape.org.
Причины выбора: те же.
Версия под Windows: есть тестовые.

Просмотрщик картинок: XnView.
Лицензия: проприетарная.
Где взять: xnview.com . Причины выбора: отличная функциональность, поддержка большого количества форматов.
Версия под Windows: есть.

Интернет:

Браузер: Mozilla Firefox.
Лицензия: Mozilla public license.
Где взять: mozilla.com/firefox .
Причины выбора: хорошее соответствие стандартам W3C, наличие качественных плагинов для многих целей, в том числе для веб-разработчиков. Недостаток: медленный и тяжелый.
Версия под Windows: есть.

IM-клиент: Pidgin.
Лицензия: GNU GPL.
Где взять: pidgin.im .
Причины выбора: поддержка многих протоколов.
Версия под Windows: есть.

Почтовый клиент: Mozilla Thunderbird.
Лицензия: Mozilla Public License.
Где взять: mozilla.com/thunderbird .
Причины выбора: хорошая функциональность, расширяемость.
Версия под Windows: есть.

IRC-клиент: irssi.
Лицензия: GNU GPL.
Где взять: irssi.org .
Причины выбора: текстовый интерфейс, удобство.
Также иногда использую Xchat (xchat.org).
Версия под Windows: у irssi есть, но не пробовал. У Xchat есть, но за деньги.

Менеджер закачек: wget.
Лицензия: GNU GPL.
Где взять: gnu.org/software/wget .
Причины выбора: интерефейс командной строки, хорошая функциональность.
Версия под Windows: есть, не пробовал.

Разработка программ:

Среда разработки: NetBeans.
Лицензия: CDDL.
Где взять: netbeans.org .
Причины выбора: поддержка многих языков, хорошая функциональность, расширяемость. Недостаток: требует достаточно много ресурсов.
Версия под Windows: есть.

Основной язык разработки: python.
Лицензия: python licence.
Где взять: python.org .
Причины выбора: удобный и выразительный синтаксис, богатые возможности, большое количество библиотек.
Версия под Windows: есть.

Мультимедиа:

Проигрыватель: MPlayer/SMPlayer.
Лицензия: GNU GPL.
Где взять: mplayerhq.hu , smplayer.sourceforge.net .
Причины выбора: нетребователен к ресурсам, поддержка многих форматов.
Версия под Windows: есть.
Примечание: SMPlayer это оболочка для MPlayer.

Звуковой редактор: Audacity.
Лицензия: GNU GPL.
Где взять: audacity.sourceforge.net .
Причины выбора: не специалист по работе со звуком, но все нужные мне функции есть.
Версия под Windows: есть.

Наука

Система компьютерной алгебры: Maxima.
Лицензия: GNU GPL.
Где взять: maxima.sourceforge.net .
Причины выбора: хорошая функциональность, приятный язык команд и сценариев.
Версия под Windows: есть.
Примечание: в качестве оболочки использую wxMaxima .

Построитель графиков: gnuplot.
Лицензия: собственная свободная.
Где взять: gnuplot.sf.net .
Причины выбора: управление из командной строки, большое количество выходных форматов, возможность писать сценарии.


Полный текст сообщения

10 июл. 2009 г.

Призрак прошлого: коммутатор 3Com SuperStack II Switch 1000

Попал мне в руки управляемый коммутатор 3Com SuperStack II Switch 1000, примерно 1997 года выпуска. Разумеется, захотелось посмотреть на него подробнее. Вот и посмотрим одно из устройств, с которыми работало предыдущее поколение админов. Сперва рассмотрим снаружи, а потом с точки зрения управления и возможностей.

Внешний вид

Вот примерно так он выглядит (фотоаппарата у меня нет, потому пришлось использовать первое попавшееся изображение). По сегодняшним меркам устройство невероятно большое — полтора юнита в высоту, 19" в ширину и 300 миллиметров в глубину, а весит почти пять килограммов. И это все ради двенадцати портов 10BaseT и одного 100BaseT.

На задней панели есть разъем для подключения дополнительных модулей, вроде дополнительных портов FastEthernet или ATM, разъем питания и хитрые разъемы для внешних резервных блоков питания. Сами эти блоки я никогда в жизни не видел. Расположить разъем для модулей сзади, конечно, было очень мило со стороны инженеров 3Com — удобства использования это совершенно не прибавляет. Еще там есть порт RS232.

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

Управление

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

Под последовательным портом заботливо подписаны его настройки: 9600, 8, N, 1. Впрочем, они почти у всех сетевых устройств такие. Разъем типа male, что несколько осложняет поиск подходящего кабеля, но в запасах таки находится кое-что. Настраивам соответствующим образом minicom и подключаемся.

Нас встречает кривая, но трогательная ASCII-картинка, возвещающая что мы действительно находимся в консоли управления коммутатором SuperStack II. Нажимаем Enter, и с нас требуют ввести логин и пароль. К счастью, изображать кулхацкера не пришлось, так как прошлый владелец предусмотрительно сбросил настройки (или вообще не менял их, это мне неизвестно). Находим в документации встроенные учетные записи, выбираем ту, что с наибольшими правами (security, пароль тоже security) и нас пускают внутрь. Учетная запись admin, упомянутая в доках, почему-то отсутствует, но по уровню доступа от security все равно не отличается, так что огорчения в этом никакого.

Смотрим, что тут есть внутри. Описания и документация не врут — устройство очень интеллектуально, особенно для своих лет. Правда интерфейс управления удобным назвать трудно, все таки командная строка лучше, чем тыканье в псевдографические кнопки. Веб-интерфейса тоже нет, но в те времена это никого не удивляло. Вот так выглядит главное меню: Если пройтись по его пунктам, можно увидеть, что коммутатор умеет VLAN'ы, SNMP, резервирование портов, привязку порта к MAC-адресу, Spanning Tree Protocol, в сущности, многое их того, что умеют современные. Правда теперь это все умеют устройства начального уровня при существенно большей производительности, а он в год своего выпуска явно начальным уровнем не считался.

Вот еще несколько снимков экрана из консоли управления.
Настройка параметров порта (это единственный порт FastEthernet): Почему-то идентификатор порта 14, а не 13, как должно бы быть. Следствие это суеверий разработчиков или наличия в устройстве скрытого порта я так и не понял.
Просмотр статистики трафика для порта: Просмотр и настройка VLAN'ов: Отдельного упоминания заслуживает просмотр базы данных MAC-адресов. По ней можно осуществлять поиск. Выглядит это вот так: Интересная фича — возможность смены режима коммутации пакетов, например с Fast Forward на Store and Forward. Экран настройки параметров устройства: Из консоли можно перезагрузить коммутатор, сбросить настройки и обновить прошивку. Вот экран обновления: Ну и понятно, что можно назначить ip-адрес, маску и шлюз по умолчанию. Обратите внимание, что там еще упоминается ныне покойный протокол IPX:

Вывод

Двенадцать лет назад уже делали весьма достойное оборудование. Если бы не низкая скорость передачи данных, его бы и сейчас вполне можно было использовать в качестве коммутатора небольшой рабочей группы. Но сейчас устройство, работающее на 10 Мбит/с скорее заслуживает место в музее, чем в реальной сети.


Полный текст сообщения

5 июл. 2009 г.

Памятка пользователю по информационной безопасности. Как защитить свой компьютер и информацию на нем.

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

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

Для чего злонамеренным личностям может понадобится ваш компьютер? Вот примеры:

  • Чтобы рассылать с него спам.
  • Чтобы собрать адреса электронной почты для рассылки спама.
  • Чтобы получить ваши личные данные, такие как учетные записи для доступа к банковским счетам, системам интернет-платежей или обычным сайтам. Последним тоже есть много применений, например чтобы выдать себя за вас и получить от ваших друзей нужную им информацию, или опять же для рассылки спама от вашего имени.
  • Чтобы использовать его в DDoS атаках или подборе паролей. DDoS атака (англ. Distributed Denial of Service — распределенный отказ в обслуживании) это тип атаки на сервер или сеть, заключающийся в отправке большого количества запросов с целью увеличить нагрузку на сервер и затруднить к нему доступ.
  • Чтобы использовать его для распространения вредоносных программ.

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

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

Безопасность в интернете

Надежные пароли

Пароль qwerty — очень плохая идея. Дата рождения, кличка собаки и любые общедоступные данные о вас в качестве пароля не менее плохая идея. И пароль, состоящий из цифр. Это только теоретически на подбор пароля из восьми символов уйдут годы, потому что прямым перебором давно никто не занимается. Подбор пароля чаще всего ведется с использованием словарей, содержащих распространенные слова, что обычно приводит к результату гораздо быстрее. Мораль: используйте надежные пароли.

Придумать безопасный и надежный пароль достаточно просто. Например, возьмите два слова, напишите их с разным регистром букв, добавьте несколько цифр. Хорошо будет, если вы добавите еще специальные символы и будете использовать малоизвестные слова, слова с грамматическими ошибками или вовсе несуществующие. Для поиска подходящих слов можно открыть узкоспециальную литературу на любой странице :) Примеры: Пересылки.пространству79, или наращиваетсяМатрично#64.

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

Защита от кражи пароля

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

Администрация сайтов, на которых вы зарегистрированы, никогда не попросит вас выслать им ваш пароль. Вообще никогда. Им это не может потребоваться ни для какой цели. И просить вас ввести его еще раз она тоже не попросит. Все письма с таким содержанием отправляются исключительно злонамеренными пользователями с целью получить ваши учетные данные (явление это называется фишинг, англ. phishing). Для справки: подделать адрес отправителя электронной почты очень простая задача, в этом поле можно указать хоть jesus@heaven.net.

Типичной практикой фишеров является создание страницы, повторяющей вид сайта некого сервиса на домене с очень похожим адресом. Например exampple.com/login вместо example.com/login. Ваши данные сохраняются на сервере злоумышленника, а потом вы перенаправляетесь на настояющую страницу. Мораль: внимательно проверяйте ссылки, по возможности лучше хранить их в закладках или набирать вручную.

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

Безопасность в файлообменных сетях

Если вы пользуетесь файлообменными сетями (eDonkey, Gnutella, прочие p2p сети), выделите отдельный каталог для тех файлов, которые хотите выложить в общий доступ. Это же касается общих папок в локальной сети.

Опасность предоставления общего доступа к корню диска (например, C:\) состоит в следующем. Многие сайты, которые требуют регистрации и ввода пароля, используют механизм cookie для хранения сведений о вас. Это позволяет не набирать пароль каждый раз при обращении к сайту. (ссылка «Запомнить пароль» это оно и есть). Технически cookie представляет собой текстовый файл. Они хранятся в вашем домашнем каталоге, внутри каталога с настройками и данными браузера. Если кто-то получит к ним доступ, он сможет с их помощью выдать себя за вас и получить доступ к вашей учетной записи на сайте.

Восстановление пароля

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

Мораль: указывайте в ответе на контрольный вопрос что-то, что действительно известно только вам. А еще лучше не относящиеся к сути вопроса, или записанное странным образом. Ответ rgb(255,0,0) в качестве ответа на вопрос про любимый цвет, или постоянная Больцмана до шестого знака в качестве любимого числа это уже не так плохо.

Безопасность личного компьютера

Не работайте под учетной записью администратора. Эта учетная запись (root под UNIX, Администратор под Windows) предназначена не для повседневной работы, а исключительно для сопровождения системы. Заходить под ней нужно только для изменения настроек, установки программ и прочих задач, действительно требующих таких привелегий. Если лень выходить и заходить под административной учетной записью, есть средство «Запуск от имени» (прямой аналог sudo в UNIX).

Ставьте для административной учетной записи достаточно сложный пароль. Для обычных пользователей это тоже имеет смысл, но для административной это критично.

Оставьте учетной записи только необходимые права. Удалите ее из группы «Администраторы» и внесите в группу «Пользователи». Это стоит сделать потому, что многие вредоносные программы не используют уязвимости системы, и при запуске от имени пользователя с ограниченными правами не смогут причинить существенного вреда. Под Windows это можно сделать в Панели управления, оснастка «Пользователи и группы», либо выполнив команду lusrmgr.msc. Под UNIX правьте /etc/group.

Используйте автоматическое обновление системы. Это необходимо потому, что во всех программах порой встречаются ошибки, и некоторые из них могут быть использованы для несанкционированного получения доступа к тому, к чему его быть не должно. Живой пример: уязвимость в RPC DCOM Windows NT, позволявшая получить неограниченный доступ к системе, в том числе по сети. Автоматическое обновление обеспечит вам более или менее своевременное исправление этих ошибок и не позволит злоумышленнику ими воспользоваться. Это же касается обновления прочих программ.

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

Вредоносные программы

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

Не устанавливайте программы из непроверенных источников. Лучше всего используйте свободное программное обеспечение, или покупайте лицензионное. Дело в том, что зачастую генераторы ключей и прочие кряки помимо всего прочего содержат в себе еще и вредоносное ПО (т.н. «троянский конь». Если уж используете пиратский софт, ищите готовые серийные номера.

Для проверки подозрительных файлов можно использовать серврис http://virusscan.jotti.org/ru. Он проверяет файл несколькими различными антивирусами.

Заключение

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


Полный текст сообщения

3 июл. 2009 г.

Руководство начинающего веб-разработчика. Протокол HTTP.

Краткая теория

Основным протоколом передачи данных в World Wide Web является HTTP (англ. Hyper Text Transfer Protocol — протокол передачи гипертекста). Для тех, кто не знает: сетевой протокол это набор соглашений и правил, позволяющий подключенным к сети устройствам осуществлять установление соединения и обмен данными.

HTTP реализует технологию «клиент-сервер», то есть, в нем присутствуют выделенные клиент, которые отправляет запрос, и сервер, который этот запрос обрабатывает и отправляет клиенту ответ. Наиболее распространенным типом HTTP-клиента является браузер, например Mozilla Firefox, Opera или Microsoft Internet Explorer.

Для указания адреса в HTTP используется URI (Uniform Resource Identifier — унифицированный идентификатор ресурса) со схемой http (схема в URI это часть до первого двоеточия). Видели их все, адреса страниц вроде http://example.com/pages/index.html это они и есть.

Протокол HTTP не сохраняет состояние. Это значит, что каждая пара запрос-ответ независима от предыдущих, и о предыдущих запросах протокол ничего не знает.

Сообщения HTTP передаются в текстовом виде. Это увеличивает их размер, но зато упрощает разработку приложений, работающих с ним и анализ сообщений.

Формат сообщения

Любое сообщение имеет вид:

Стартовая строка
Заголовки

Тело сообщения

Стартовая строка будет разной для запроса и ответа. Для запроса она имеет вид: Метод URI HTTP/версия. Для ответа же: HTTP/версия код_состояния пояснение. Самая распространенная на данный момент версия это 1.0, многие сервера поддерживают 1.1. В разработке находится версия HTTP-ng (next generation).

Заголовки имеют вид: название заголовка: значение. Тело сообщения отделяется пустой строкой и содержит произвольные данные.

Методы запроса

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

Спецификация протокола включает в себя следующие методы:

  • OPTIONS — используется для определения возможностей веб-сервера или параметров соединения для конкретного ресурса.
  • GET — получение содержимого ресурса. Позволяет указывать параметры запроса в виде http://example.org/resource?variable1=value1&variable2=value2… Этот метод позволяет также получить только часть содержимого или запросить его только в случае выполнения некоторого условия (например, только если оно изменялось)
  • HEAD — похож на GET, но в ответе отсутствует тело сообщения. Этот метод используют для получения метаданных, например для проверки времени последнего изменения ресурса или проверки его существования.
  • POST — применяется для передачи данных пользователя на сервер.
  • PUT — осуществляет загрузку содержимого ресурса на сервер.
  • PATCH — тот же PUT, но применяется к части ресурса.
  • DELETE — удаляет указанный ресурс с сервера.
  • TRACE — возвращает ответ в таком виде, чтобы можно было отследить, что в него добавляют промежуточные сервера.
  • CONNECT — используется с серверами, поддерживающими туннельный режим SSL.
  • LINK — устанавливает связь ресурса с другими.
  • UNLINK — удаляет связь ресурса с другими.

HTTP-сервер обязан поддерживать только методы GET и HEAD, реализация остальных не обязательна. В реальности наиболее часто используются GET, HEAD и POST, остальные применяются крайне редко.

Заголовки

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

Заголовки бывают четырех типов:

  • Общие заголовки — могут быть как в запросе, так и в ответе.
  • Заголовки запроса — включаются только в запрос
  • Заголовки ответа — включаются только в ответ.
  • Заголовки сущности — относятся к отдельной сущности сообщения.

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

Заголовки запроса

Host: имя хоста
В этом заголовке указывается имя компьютера, с которого отправлен запрос. Может содержать ip-адрес или доменное имя.

Accept: MIME-тип
Описывает допустимый формат ответа в виде типа MIME. Например text/html, или image/png.

User-agent: название и версия клиента
В нем указывается тип и версия использованного клиента. Например Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; v:1.7.5) Gecko/20041202 Firefox/1.0

Заголовки ответа

Server: название сервера
Указывает тип и версию программного обеспечения сервера. Например Apache/2

Last-Modified: дата
Содержит дату последней модификации содержимого ресурса.

Content-Type: тип MIME
Содержит формат тела ответа.

Content-Length: размер в байтах
Содержит размер тела сообщения в байтах.

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

Коды состояний

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

Информационные (Informational), значения вида 1xx
Они информируют клиента о процессе передачи. Ответ с таким кодом содержит только стартовую строку и может быть, несколько специфичных заголовков.
Успешный результат (Success), значения вида 2xx.
Сообщают об успешном выполнении запроса, ответ может содержать тело сообщения. Примеры: 200 Ok — запрос выполнен успешно.
Перенаправление (Redirection), значения вида 3xx.
Сообщают о том, что для получения ресурса нужно совершить другой запрос, с указанием URI ресурса. Пример: 301 Moved permanently — ресурс был окончательно перемещен на другой адрес.
Ошибка клиента (Client error), значения вида 4xx.
Сообщают о том, что клиент отправил ошибочный запрос. Например 404 Not found — Ресурс не найден, или 401 Bad request — запрос сформирован неверно.
Ошибка сервера (Server error), значения вида 5xx.
Информируют об ошибке на сервера. Например 500 Internal server error — внутренняя ошибка сервера, вы неоднократно столкнетесь с ней при разработке собственных приложений :)

Практическая часть

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

Сперва мы сформируем простейший HTTP-запрос и поосмотрим, что на него ответит сервер. Чтобы сделать это, запустите утилиту telnet (или лучше netcat, если вы используете UNIX). Если вы используете UNIX, вы знаете что делать; под Windows: Пуск, Выполнить, cmd. Введите команду telnet w3.org 80.В качестве примера взят сервер w3.org, на котором находится сайт организации World Wide Web Consortium, которая занимается стандартами WWW. Теперь формируем запрос:

[user@host ~]$telnet w3.org 80
Написанное курсивом писать не надо, это пояснения.
Trying 128.30.52.45...
Connected to w3.org.
Escape character is '^]'.
Писать начинаем отсюда. Все предыдущее это вывод программы.
GET / HTTP/1.0 Это стартовая строка.
Host: ваш ip-адрес (хотя можно ввести любой адрес или домен) Это заголовок.

После этого нажмите Enter два раза и вы получите в ответ что-то вроде

HTTP/1.1 200 OK Так выглядит стартовая строка ответа.
Date: Fri, 03 Jul 2009 07:21:15 GMT Вот заголовок.
Server: Apache/2 Еще один заголовок, это заголовок ответа.
Content-Length: 829
Connection: close
Content-Type: text/html;charset=ISO-8859-1

Тело ответа, здесь не приведено для экономии места

Исходя из написанного выше, мы можем понять что запрос был выполнен успешно (200 Ok), в качестве веб-сервера использован Apache, тело ответа имеет размер 829 байт и формат HTML.

В качестве эксперимента попробуйте выполнить запросы с другими методами, например HEAD / HTTP/1.0 или DELETE / HTTP/1.0. Посмотрим на заголовки ответа на последний запрос:

HTTP/1.1 405 Method Not Allowed
Date: Fri, 03 Jul 2009 08:47:22 GMT
Server: Apache/2
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 224
Connection: close
Content-Type: text/html; charset=iso-8859-1

Сервер выдал код состояния 405, который означает, что клиент отправил ошибочный запрос, и данный метод не разрешен к выполнению. Также обратите внимание на заголовок Allow:, в котором сервер указал список разрешенных к выполнению методов.

Изображаем веб-сервер

Теперь мы посмотрим на процесс в другой стороны, а именно со стороны сервера. Все, что я здесь описываю, относится к UNIX-системам, сделать это под Windows стандартными средствами не получится. Со временем найду средства или напишу свою программу, пока для экспериментов можете использовать любой live-cd с Linux.

Простейший способ получать данные от программ по сети предоставляет утилита netcat. Выполните команду netcat -lp 7268 Эта команда запустит процесс, слущающий на порту 7268 (взят случайный порт, не используемый ничем из стандартных приложений). Запустить ее дадут только от имени суперпользователя, поэтому зайдите под учетной записью root или используйте sudo ( sudo netcat -lp 7268 ).

Теперь откройте ваш браузер и введите адрес http://localhost:7268. В выводе netcat появится что-то вроде:

[user@host ~]$sudo netcat -lp 7268
GET / HTTP/1.1
Host: localhost:7268
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.9) Gecko/2009041500 SUSE/3.0.9-0.1 Firefox/3.0.9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Похоже на то, что мы писали серверу в предудщем параграфе? Это браузер отправил нам GET-запрос. Теперь мы можем на него ответить.

HTTP/1.0 200 Ok
Server: netcat
Content-type: text/html

Hello!

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

Заключение

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

Ссылки

Полный текст сообщения