phdru.name / Russian / Software

browsers_servers_html_css_java.html

Лекция.

Браузеры - сложные программы, состоящие из множества компонент (вообще современное программирование тяготеет к компонентам; их потом можно еще где-то использовать, это называется code reuse, переиспользование кода).

Список компонент браузера примерно такой:

1. Низкоуровневые части, поддержка сетевых протоколов, шифрования и т.п. 2. Рендерер, HTML/CSS-engine. 3. Почтовый интерфейс (не протокол). 4. Интерпретатор JavaScript. 5. Интерпретатор Java (по-настоящему называется JVM - Java Virtual Machine).

Распишу их более подробно и опишу их взаимодействие.

1. Низкоуровневые части, поддержка сетевых протоколов, шифрования и т.п.

Поддержка клиентской части протоколов HTTP, FTP, SMTP (почта); поддержка сетевого шифрования для безопасной передачи данных в обе стороны (SSL - Secure Socket Layer, HTTPS - HTTP-over-SSL, TLS - Transport Layer Security).

2. Рендерер, HTML/CSS-engine.

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

Я вот хоть и хороший программист, а писать HTML-рендерер не возьмусь ни за что.

3. Почтовый интерфейс (не протокол); довольно тесно интегрирован с HTML (потому что бывает HTML'ная почта, и даже в не-HTML-ных письмах бывают ссылки - так вот почтовый интерфейс показывает их именно как ссылки, и позволяет нажать мышкой).

4. Интерпретатор JavaScript.

JavaScript назван так маркетинговыми хитрецами из фирмы Netscape, чтобы выехать на волне успеха Sun'овской Явы. Сам язык не имеет с Явой ничего общего.

Язык предназначен для программирования на стороне клиента, для создания динамических, интерактивных страниц. Нормальный сценарий использования Скрипта: загружается страница, содержащая HTML+JavaScript. После окончания загрузки рисуется форма, открываются окошечки с подсказками (дружественный интерфейс, черт возьми). Пользователь заполняет форму и нажимает кнопку Submit. Программа на JavaScript проверяет правильность заполнения полей (даты - так даты, целые числа - значит целые, без переполнения, email-адрес должен как минимум содержать @) и отправляет форму на сервер. Или не отправляет, а сообщает пользователю об ошибках.

JavaScript имеет поверхностный (я бы так это сформулировал) доступ к HTML, благодаря чему можно задействовать HTTP/FTP протоколы, но не напрямую, а сильно обходными путями, и все равно на стороне сервера должны быть установлены программы-helper'ы. Еще JavaScript может обмениваться информацией с аплетами на Джаве. Больше ничего нет.

5. Интерпретатор Java (по-настоящему называется JVM - Java Virtual Machine).

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

Кой-какая дополнительная информация.

A. HTML. Существует несколько версий стандартов HTML. Основные - 2.0, 3.2, 4.01. Ни один браузер не поддерживает ни один стандарт HTML целиком, зато каждый добавляет что-то свое, особенное. Война конкурирующих браузеров. А пользователь, ради которого все и делается - страдает.

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

B. CSS - Cascading Style Sheet. Средство регулирования способов отображения HTML. Изначально HTML был языком разметки - "это заголовок", "этот параграф выделить". Но к сожалению, юзеры (ты когда-нибудь видел юзера, который в Word'е создает стили? нет, прямо так лепят жирность/курсив, а заголовки имитируют большим шрифтом) стали использовать HTML как язык презентации - "это жирный шрифт", "это шрифт размера 20 пунктов", таблицы стали использоваться для организации layout'а.

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

Современные браузеры CSS версии 1 реализуют довольно полно, разве что Netscape4 глючит. С CSS2 хуже, впрочем, браузеры не стоят на месте.

C. Cookie - "куки", "волшебные печеньки", "пирожки". Порция информации, которую сервер может поместить в браузер, для того, чтобы браузер в дальнейшем предъявлял куку серверу. Необходимы, потому что протокол HTTP - stateless протокол. Куки позволяют запоминать состояние и имитировать stateful протокол поверх HTTP. Кука - очень небольшая порция информации, не больше 4K, и от одного сервера запоминается не больше 4 "пирожков", поэтому обычно в куку пишется не сама информация, а ID из базы данных на стороне сервера.

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

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

Очень плохой способ - Basic Authentication. Сервер сообщает браузеру, что страница защищена, и браузер просит пользователя ввести логин и пароль. И с этим логином/паролем ходит по сайту. Достоинство этого подхода - все серверы поддерживают Basic Auth, не надо запускать CGI для проверки авторизации пользователя. Зато есть много недостатков. Во-первых, диалог с пользователем - его рисует браузер, и его вид может совершенно не укладываться в дизайн сайта. Во-вторых, браузер запоминает пароль, и помнит его до конца сессии, никого механизма logout нет.

E. (Слишком) Объектно-ориентированный язык программирования Java. Для него доступны бесплатные (в Standard Edition) Sun'овские компиляторы и библиотеки. Компилятор генерирует код виртуальной машины, натуральный ассемблер/автокод: "загрузить регистр", "запомнить регистр". Код этот потом выполняется интерпретатором - эмулятором виртуальной машины. Код этот универсальный, а проблема переносимости Джавы ограничена проблемой переносимости виртуальной машины. В принципе, все современные интерпретируемые языки программирования (Perl, Python, PHP, из числа самых популярных и известных) так поступают, только их виртуальные машины более высокоуровневые - одна строка программы компилируется в 3-5 опкодов, в то время как у Явы одна строка может скомпилироваться в сотню ассемблерных инструкций.

Архитектура виртуальной машины открыта и опубликована. Существуют и другие компиляторы, например GNU Compiler for Java или Jikes от IBM. Существуют даже альтернативные виртуальные машины (Blackdown, Kaffe), но их качество сильно оставляет желать лучшего.

Sun поставляет к Джаве множество библиотек. В минимальный бесплатный набор входят AWT (Abstract Windowing Toolkit, абстрагирующий окошечные системы различных ОС), Swing (GUI-компоненты), поддержка сетевых протоколов и доступа к SQL-серверам, многое другое. Множество дополнительных библиотек даже готовых аплетов доступно из Интернета бесплатно и за деньги.

На Джаве пишутся разнообразные программы и компоненты. Так "аплеты", которые я тут много раз упоминал - это программки, выполняющиеся в среде браузера (то есть в JVM, встроенной в браузер); название applet - это просто уменьшительно-ласкательное (суффикс -let) от слова application; так что по-русски это будет "программка", "программулька", "приложеньице". Слово servlet означает "серверный аплет". Для программирования на стороне сервера выпущено еще больше сред (framework), компонентов, библиотек.


Эта страница http://phdru.name/Russian/Software/browsers_servers_html_css_java.html была сгенерирована 08.06.2014 в 20:51:53 из шаблона CheetahTemplate browsers_servers_html_css_java.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.