{"id":279,"date":"2015-03-10T00:14:08","date_gmt":"2015-03-09T22:14:08","guid":{"rendered":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/?page_id=279"},"modified":"2026-03-23T02:00:00","modified_gmt":"2026-03-23T00:00:00","slug":"laborator-http","status":"publish","type":"page","link":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/programare-web\/laborator-http\/","title":{"rendered":"Programare Web: Laborator HTTP"},"content":{"rendered":"<h2>Lectura obligatorie<\/h2>\n<p><a href=\"http:\/\/www.jmarshall.com\/easy\/http\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">HTTP Made Really Easy<\/a><br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Hypertext_Transfer_Protocol\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Hypertext Transfer Protocol<\/a><br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP_cookie\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">HTTP cookie<\/a><br \/>\n<a href=\"http:\/\/www.garshol.priv.no\/download\/text\/http-tut.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">How the web works: HTTP and CGI explained<\/a><\/p>\n<h2>Cerinte<\/h2>\n<p>In cadrul acestui laborator studentii nu vor avea de implementat nimic \ud83d\ude42 (a se vedea totusi observatiile de la exemplele 7 si 8), dar vor trebuie sa parcurga lectura obligatorie de mai sus. De asemenea, vor parcurge exemplele de mai jos, le vor face functionale si le vor rula pe laptopul personal sau in contul personal de pe serverul linux.scs.ubbcluj.ro, le vor intelege si vor trebui sa explice functionarea acestora. In saptamana 6 este posibila primirea unui test in vederea evaluarii cunostintelor prezentate la curs si in cadrul resurselor bibliografice de mai sus.<\/p>\n<h3>Exemplul 1<\/h3>\n<p>Fisierul <code>demo.c<\/code>, se va compila ca <code>demo.cgi<\/code>.<\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex1\/demo.c nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex1\/demo.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<h3>Exemplul 2<\/h3>\n<p>Fisierul <code>contor.cgi<\/code>. I se vor atribui drepturi de executie pentru serverul web (o+x).<\/p>\n<pre class=\"lang:sh url:wp-content\/uploads\/code\/pw\/cgi\/ex2\/contor.sh nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex2\/contor.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<h3>Exemplul 3 &#8211; Incapsularea parametrilor trimisi din browser prin GET<\/h3>\n<pre class=\"lang:html url:wp-content\/uploads\/code\/pw\/cgi\/ex3\/index3.html nums:false\"><\/pre>\n<p>Fisierul <code>show_input_data.c<\/code>, se va compila ca <code>show_input_data.cgi<\/code><\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex3\/show_input_data3.c nums:false\"><\/pre>\n<p>In locul variantei de mai sus scrise in C, se poate folosi varianta scrisa ca shell Unix:<\/p>\n<pre class=\"lang:sh url:wp-content\/uploads\/code\/pw\/cgi\/ex3\/show_input_data3.sh nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex3\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<h3>Exemplul 4 &#8211; Incapsularea parametrilor trimisi din browser prin POST<\/h3>\n<p>Acelasi exemplu ca exemplul 3, dar datele sunt trimise prin POST.<\/p>\n<pre class=\"lang:html url:wp-content\/uploads\/code\/pw\/cgi\/ex4\/index4v2.html nums:false\"><\/pre>\n<p>Fisierul <code>show_input_data.c<\/code>, se va compila ca <code>show_input_data.cgi<\/code><\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex4\/show_input_data4.c nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex4\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<h3>Exemplul 5 &#8211; Incapsularea continutului unui fisier prin POST<\/h3>\n<pre class=\"lang:html url:wp-content\/uploads\/code\/pw\/cgi\/ex5\/index.html nums:false\"><\/pre>\n<p>Fisierul <code>show_input_data.c<\/code>, se va compila ca <code>show_input_data.cgi<\/code><\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex5\/show_input_data.c nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex5\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<h3>Exemplul 6 &#8211; Afisarea antetelor din cadrul cererii HTTP<\/h3>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex6\/headers.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<p>Intrebare: Unde puteti gasi si cum puteti vizualiza codul sursa al exemplului 6 de mai sus?<br \/>\nRaspuns: Ar trebui sa stiti pana in acest moment pe baza cunostintelor dobandite :).<\/p>\n<h3>Exemplul 7 &#8211; URL Decoding<\/h3>\n<p>Fisierul <code>decodeURL.c<\/code>, se va compila ca <code>decodeURL.cgi<\/code>.<\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex7\/decodeURL.c nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex7\/decodeURL.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<p>Cerinta facultativa pentru extra puncte la laborator: Modificati exemplul de mai sus astfel incat sirul care trebuie decodificat sa fie trimis serverului prin intermediul unui formular.<\/p>\n<h3>Exemplul 8 &#8211; Managementul sesiunii si caracterul stateless al protocolului HTTP<\/h3>\n<p>Fisierul <code>play.c<\/code>, se va compila ca <code>play.cgi<\/code>.<\/p>\n<pre class=\"lang:C url:wp-content\/uploads\/code\/pw\/cgi\/ex8\/playv2.c nums:false\"><\/pre>\n<p><a href=\"http:\/\/www.scs.ubbcluj.ro\/~bufny\/cgi-bin\/ex8\/play.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">See it in action<\/a><\/p>\n<p>Cerinta facultativa pentru extra puncte la laborator: Modificati exemplul de mai sus astfel incat managementul sesiunii sa nu se faca prin intermediul unui input de tip hidden ci prin intermediului unui cookie.<\/p>\n<hr>\n<p>Tutorial pentru a va instala serverul web Apache pe Windows (veti avea nevoie la urmatoarele laboratoare de el, inclusiv la laboratoarele de AJAX, PHP, etc) si de a va &#8220;juca&#8221; cu protocolul HTTP si exemplele de la acest laborator pe Windows:<\/p>\n<ol>\n<li>Cautati, download-ati si instalati xampp\n<li>Porniti xampp si din fereastra de control al xampp porniti serverul web Apache. Ar trebui sa vedeti ca acesta ocupa porturile 80 si 443\n<li>Verificati ca functioneaza http:\/\/localhost sau https:\/\/localhost\n<li>Localizati DocumentRoot-ul serverului web (directorul implicit din care serverul web serveste documente si care corespunde URL-ului http:\/\/localhost). Acest folder implicit este c:\\xampp\\htdocs\\, dar poate fi si altul setat cu ajutorul directivei DocumentRoot in cadrul fisierului de configurare httpd.conf al serverului web.\n<li>In orice subfolder din cadrul folderului specificat ca si DocumentRoot, puteti plasa fisiere CGI care trebuie sa fie executabile din perspectiva sistemului de operare (pe sistemul de operare Windows sunt fisiere executabile fisierele cu extensia .com, .exe, .bat)\n<li>ditati fiserului de configurare al serverului web httpd.conf pentru a specifica extensii de fisiere aditionale care sa se comporte ca fisiere CGI (serverul web sa trimita clintului output-ul rezultat in urma executiei acestor fisiere si NU continutul propriu-zis al fisierelor). Pentru aceasta directiva AddHandler din cadrul fiserului de configurare httpd.conf al serverului web ar trebui sa arate in forma urmatoare:\n<pre class=\"lang:apache nums:false\">AddHandler cgi-script .cgi .pl .asp .bat .exe<\/pre>\n<li>Restartati serverul web.\n<\/ol>\n<p>Fisier-ul de test pe Windows demo.bat:<\/p>\n<pre class=\"lang:batch nums:false\">\r\n@echo off\r\necho Content-type: text\/html\r\necho.\r\necho Hello World!\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Lectura obligatorie HTTP Made Really Easy Hypertext Transfer Protocol HTTP cookie How the web works: HTTP and CGI explained Cerinte In cadrul acestui laborator studentii nu vor avea de implementat nimic \ud83d\ude42 (a se vedea totusi observatiile de la exemplele&hellip; <a href=\"https:\/\/www.cs.ubbcluj.ro\/~bufny\/programare-web\/laborator-http\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":267,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/279"}],"collection":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/comments?post=279"}],"version-history":[{"count":77,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/279\/revisions"}],"predecessor-version":[{"id":2381,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/279\/revisions\/2381"}],"up":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/267"}],"wp:attachment":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/media?parent=279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}