Интернет програмиране с Java

HTTP протокол. Основни концепции в Web програмирането.

Борис Червенков

HTTP протокол

HTTP – Hyper Text Transfer Protocol. Малко история по въпроса за HTTP – кога и защо е възникнал, т.н.

 

HTTP представлява прост текстов протокол, който се използва за пренос на практически вякакъв вид данни, наричани събирателно ресурси. Обикновено HTTP протокола работи през TCP/IP. В HTTP протокола има понятия като клиент (обикновено това са web browser-ите) и сървър (това са Web сървърите).

Стандартния порт на HTTP e 80, но може да се използва всеки друг свободен TCP порт.

HTTP се състои от:

·        заявка (request) – съобщение от клиента към сървъра

·        отговор (response) – отговор на сървъра на съобщението от клиента.

Общи сведения за Web сървърите.

Web сървърите са приложения, които “слушат” на определен порт (обикновено това е стандартния порт за HTTP – 80), и отговарят на заявките, получени от клиентски приложения (най-често клиентите на Web сървърите са browser-ите). Простите Web сървъри могат просто да връщат като отговор на заявките файловете, които са разположени в директорията, обозначена като главна Web директория. Например ако имаме един прост Web сървър и сме му указали, че главната му директория ще е C:\MyWebSite, то тогава когато browser-a му поиска ресурса http://www.mywebserver.com/pictures/index.html, то  Web сървъра ще му предостави файла C:\MyWebSite\pictures\index.html. Но всички съвременни web сървъри имат възможността да предоставят на клиентите си динамично генериран HTML. Тази технология се нарича CGI – Common Gateway Interface. CGI се изразява в това, че на базата на HTTP заявката web сървъра решава коя CGI програма да стартира и връща на клиента това, което CGI програмта изпише на стандартния изход. CGI програмата може да бъде написана на практически всеки език или script за програмиране.

Заявка - request

Формата на HTTP заявката е следният:

 

<метод> <URI> HTTP/1.1

<headers>

<empty line>

 

Има 3 основни елемента на HTTP заявката: метод, URI и header полета.

 

Метод на заявката - Метода описва вида на заявката, изпратена от клиента. Най-често използваните методи са GET и  POST. Чрез GET метода клиента изисква някакъв ресурс от Web сървъра. POST метода служи за предаване на данни към сървъра. Имената на методите в HTTP заявките се изписват винаги с главни букви.

URI (Unique Resource Identifier) – Уникалния идентификатор еднозначно определя ресурса, над който ще оперира метода на заявката. Това е частта от URL, която стои след името на хост-а (сървъра) в URL.

HTTP/1.1версията на HTTP протокола, която ще буде използвана за осъществяването на тази HTTP сесия.

Header полета - Полетата от заглавната част на заявката носят допълнителна информация, касаеща заявката и определяща изисквания относно ресурса, който се очаква да бъде върнат от сървъра.

Празен ред - всяка HTTP заявка завършва с празен ред.

 

Пример:

Ако искаме да заредим началната страница от сайта www.dir.bg, това може да стане  със следната HTTP заявка:

 

GET / HTTP/1.1

Host: www.dir.bg

¿

Методи за HTTP заявка

Протокола HTTP версия 1.1 поддържа общо 8 различни метода: GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE, CONNECT. Най-често използваните методи обаче са GET и POST. Също така те имат най-голямо отношение къмм Web програмирането.

GET метод

GET метода прествавлява най-общо казано заявка от вида “дай ми ресурса, указан от URI”. Той се използва най-често в света на WWW, тъй като повечето Интернет страници са просто HTML файлове, разположени върху файловата система на сървъра и които Web сървъра просто връща на клиентите.

Реален пример на заявка с GET метод:

 

GET /InetJava-2002-program.html HTTP/1.1

Host: inetjava.sourceforge.net

Accept: */*

Accept-Language: bg

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0(compatible;MSIE 6.0; Windows NT 5.0)

Connection: Keep-Alive

Cache-Control: no-cache

¿

 

Тази заявка ще ви върне програмта на курса Интернет програмиране с Java.

Параметрите при заявка с GET метод се предават като след URI се постави въпросителна и след нея следват двойки <име на параметър1>=<стойност>, като двойките от този вид се разделят една от друга със &.

POST метод

POST метода предава данни на сървъра, които той може да обработи и на базата на тях да върне някакви резултати. POST метода се използва в случаите, когато отговора на клиентите представлява резултата от изпълнението на сървърски CGI скрипт, на който трябва да бъдат подадени някакви данни.

Реален пример на заявка с POST метод:

POST /webmail/login.phtml HTTP/1.1

Host: www.abv.bg

Accept: */*

Accept-Language: bg

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0(compatible;MSIE 6.0; Windows NT 5.0)

Connection: Keep-Alive

Cache-Control: no-cache

Content-Length: 59

¿

LOGIN_USER=boris

DOMAIN_NAME=abv.bg

LOGIN_PASS=mypassword

¿

Както се вижда от примерната POST заявка, параметрите се предават след самата заявка, като header полето показва общата дължина в символи на всички параметри и техните стойности.

 

Отговор – response

На всяка заявка на клиент (валидна или не) web сървъра връща някакъв отговор. При валидна заявка web сървъра връща на клиента изискания от него ресурс, ако последният съществува.

Форматът на отговора на HTTP сървъра е следният:

 

Статус линия – първият ред от отговора на сървъра съдържа версията на протокола – HTTP/1.1, код за резултат от заявката и кратко текстово пояснение на кода.

Header полета – също както при заявката, при отговора на HTTP сървъра присъстват header полета, които имат същия формат, както при заявката. Тук те също се използват за да внесат допълнителна информация за върнатия ресурс.

Празен ред – заглавната част от отговора завършва с празен ред.

Ресурс – след празния ред следва ресурса, който е бил изискан и ако той е валиден и съществува.

 

Пример за HTTP отговор:

На заявката

GET / HTTP/1.1

Host: www.dir.bg

 

Сървърът ще върне следния резултат:

 

HTTP/1.1 200 OK

Date: Sun, 14 Apr 2002 10:50:24 GMT

Server: Apache/1.3.23 (Unix) Debian GNU/Linux mod_ssl/2.8.7 OpenSSL/0.9.6c PHP/4.0.6

Cache-Control: private

X-Powered-By: PHP/4.0.6

Connection: close

Transfer-Encoding: chunked

Content-Type: text/html; charset=windows-1251

 

1d5

<html><head><link href="http://i.dirbg.com/dir.ico" rel="shortcut icon"><title>Dir.bg - The Portal. My portal,Key,E-Мail,News,Chat,Clubs,Bazar,Fun,Games,Music, Gossips, Cards,Webhost.</title></head><frameset rows="*,19" border=0 framespacing=0 frameborder=0><frame src="index.php?i=1" name=i marginwidth=0 marginheight=0 frameborder=0 scrolling=Auto noresize><frame src="tb.php" name=tb marginwidth=0 marginheight=1 frameborder=0 scrolling=No noresize></frameset></html>

0

 

Ако има някакъв проблем с изискания ресурс, на статус линията (първата линия от отговора на HTTP сървъра) ще има код за резултат от заявката, който ще указва какъв точно е проблема.

Основни концепции в Web програмирането

Всички сме виждали web базирани email клиенти – те са един чудесен пример за web приложения.

Web базираните приложения представляват CGI програми, които получават данни от клиентските browser-и, извършват някакви операции с тях и след това връщат резултата във вид на HTML или друг формат, който клиентския browser-а поддържа. От тук нататък ще се опитаме да представим различните аспекти на web програмирането, неговите предимства и недостатъци. Също така ще направим една уговорка – като средства за изграждане на потребителския интерфейс на web приложенията ще имаме предвид само HTML, CSS и JavaScript – технологии като Flash, ActiveX, Java аплети и други подобни няма да бъдат разглеждани в останалата част от този курс.

Всяко web приложение се разделя на 2;

·        сървърска част – това са CGI програмите, които обработват данните и динамично генерират HTML/CSS/JavaScript

·        клиентска част – самият HTML/CSS/JavaScript.

HTML

HTML (Hyper Text Markup Language) е създаден като част от World Wide Web от Тим Бернерс-Лий в началото на 90-те години. HTML е базиран на SGML (Standart Generalized Markup Language) – стандартен формат за представяне на текст, широко използван от американското правителство, като наследява неговия синтаксис

HTML не е програмен, а е по-скоро описателен език за форматиране на текста. Той е в текстов вид, като в текста са вмъкнати инструкции (тагове), които обозначават как точно ще се изобрази текста, след обработката на HTML файла. В HTML файла могат да се указват връзки (hyperlinks) към произволни отдалечени ресурси.

Основната сила на HTML е неговата простота, въпреки че в последно време HTML премина през доста бурно развитие, което от своя страна доведе до неговото усложняване. Въпреки това HTML в комбинация с различни технологии като JavaScript, Cascading Style Sheets предлага доста богати възможности за реализиране на сложни приложения.

CSS

Cascading Style Sheets е допълнение към HTML. Разработен е от W3C (World Wide Web Consortium). Той е език за описание на атрибутите и позиционирането на HTML елементите.

JavaScript

 JavaScript е сравнително прост скриптов език, който се изпълнява на browser-а на клиента и предлага доста възможности за разработване на сложни и интересни web страници. Първоначално е разработен от Netscape, но в момента всички сериозни browser-и го поддържат в една или друга степен.

Разпределеност и платформена независимост на web приложенията

Може би най-голямото предимство на web програмирането е, че web приложенията могат да се използват от различни компютри, работещи под различни системи и различни browser-и, стига да имат достъп до web сървъра, на който работи приложението. Като се има предвид множеството операционни системи в web пространството, това че се поддържа само една версия на приложението е едно серизно предимство пред другите видове програмиране.

Понякога обаче, в стремежа си да създадат по-сложни web приложения програмистите се възползват от възможностите на определен browser – един пример за това е MS Internet Explorer. Той поддържа голяма част от общоприетите спецификации за HTML и CSS, но има и множество специфични тагове и стилове. Доста е трудно например да се направи нещо по-сложно с JavaScript, което да върви еднакво добре както на Internet Explorer, така и на Netscape Navigator 4.x (новият Netscape Navigator 6, както и Opera и някои други вече се справят доста добре с горепосочените технологии). Подобен проблем се появява понякога и от това, че самият HTML не изглежда еднакво на всички browser-и.

Платформената независимост на Java допълнително улеснява разработчиците на web приложения, тъй като вече и сървърската част на web приложението става напълно платформено независима. Също така вградените възможности на Java за унифициран достъп до бази данни през JDBC допълнително улесняват работата на програмиста.

Несесийност на HTTP протокола

Един от най-големите недостатъци на web програмирането е несесийният характер на HTTP протокола. В началото той е бил замислен за достъп до статични ресурси (HTML файлове, изображения, т.н.) и тази си функция той изпълнява прекрасно. Въпреки че HTTP версия 1.1 въвежда така наречените Keep-Alive връзки (през веднъж осъществена връзка между клиента и сървъра се изпълняват множество HTTP заявки), това не решава проблема с еднозначната идентификация на клиента от страна сървърската част на web приложението. За щастие J2EE спецификацията за сървлети и JSP-та решава този проблем прозрачно - програмиста няма нужда да се грижи за поддържането на сесии с потребителите.

Производителност

Производителността е един от големите плюсове на Web програмирането. При този вид програмиране бизнес операциите на системата са изнесени на сървъва, като по този начин ролята на клиента се свежда до това да обработи и покаже HTML документа. И тъй като HTML е сравнително прост описателен език, изискванията за клиентската машина не са толкова големи.

Проблем за производителността на web приложенията обаче се явява бавната връзка на клиента със сървъра – неведнъж сме чакали по 10 минути да се зареди “тъпото Yahoo/Hotmail/АБВ”.

Другият проблем за web програмирането е статичният характер на HTML. И въпреки че JavaScript донякъде решава този проблем, при необходимост от обновяване на данните на екрана обикновено се прави заявка към web сървъра.

Сигурност

Тук трябва да отбележим несъмненото превъзходство на web програмирането пред конвенционалното програмиране.

От страна на клиента

В компютърната индустрия вирусите, които се разпространяват с изпълнимите програми, са нанесли щети на много хора и корпорации. Инстаилрането на антивирусни програми, които следят изпълнението на всяка стартирана програма забавя неимоверно бързодействието на системата и не е удачно решение.

От друга страна web приложенията са напълно безопасни, тъй като при тях клиентската част се изразява в форматирането на документа, описан в HTML/CSS, и изпълнението на JavaScript, който има права само да автоматизира browser-a.

От страна на сървъра

Предимството на web приложенията се проявява най-вече от гледна точка на сървъра. Голям брой клиенти могат да имат достъп до някакъв ресурс на сървъра (база данни, изчислителна мощ, т.н.), без да могат да го достъпват директно. Въвеждането на HTTPS като стандарт също е важна предпоставка за сигурността на тези разпределени системи.

Заключение

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