Kafli 1: Internetið & vefurinn

1.1 Internetið & vefurinn

1.1.1 Internetið 

Internetið er alþjóðlegt netkerfi sem samanstendur af hundruðum milljóna tölva tengdra saman yfir tugþúsundir neta. Fyrir samskipti er notaður hópur samskiptaregla, Internet protocol suite sem flokkast í:

1.1.2 IP tölur 

IP tölur eru notaðar til þess að aðgreina og staðsetja tæki tengd internetinu. Fyrsta útgáfa þeirra eru IPv4 tölur, sem samanstanda af fjórum, tveggja bæta tölum (0–255) sem mynda 32 bita IP tölu11 Þegar þetta er skrifað er t.d. 130.208.165.186 IP talan fyrir vél sem hýsir vef Háskóla Íslands..

Þar sem við eigum mun auðveldara með að muna nöfn en tölur er til kerfi sem þýðir þarna á milli, það heitir Domain Name System eða DNS. Vegna þessa getum við slegið inn hi.is sem er lénsheiti (e. domain name) og DNS þjónar á internetinu láta okkur vita hvaða IP tala á við þann þjón.

Til þess að komast að því hvaða IP tölu ákveðið lén er með (og við höfum aðgang að því) getum við notað ping CLI forritið22 CLI forrit geta tekið við breytum, oftast með - eða -- fyrir framan. Í dæminu er -c 4 að skilgreina að framkvæma eigi fjórar fyrirspurnir.. Það sendir gögn frá tölvu á lén, ef þar á bakvið er tölva fáum við að vita IP tölu hennar. Sú tölva mun senda okkur gögnin til baka og ping forritið mun taka saman hversu langan tíma það tók og hvort öll gögnin hafi komið til baka.

$ ping -c 4 hi.is
PING hi.is (130.208.165.186): 56 data bytes
64 bytes from 130.208.165.186: icmp_seq=0 ttl=55 time=3.497 ms
64 bytes from 130.208.165.186: icmp_seq=1 ttl=55 time=10.125 ms
64 bytes from 130.208.165.186: icmp_seq=2 ttl=55 time=3.607 ms
64 bytes from 130.208.165.186: icmp_seq=3 ttl=55 time=3.913 ms
--- hi.is ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.497/5.285/10.125/2.798 ms

Þar sem IPv4 tölur geta aðeins túlkað 2³² = 4.294.967.296 IPv4 tölur er skortur á IP tölum í heiminum og var seinustu IPv4 tölunum ráðstafað í janúar 2011. Til þess að komast hjá þessu var skilgreind ný útgáfa af IP tölum, IPv6 tölur sem geta túlkað 2¹²⁸ IP tölur. IPv6 tölur eru túlkaðar með átta hópum af fjórum sextándakerfis tölum með tvípunkt á milli. Dæmi um IPv6 tölu er 2001:0db8:85a3:0000:0000:8a2e:0370:733433 til eru vel skilgreindar leiðir til að stytta þær, t.d. er 2001:db8::8a2e:370:7334 stytting á dæminu.. Í dag eru bæði IPv4 og IPv6 tölur í notkun á internetinu.

Nokkrar IP tölur og hópar af IP tölum eru fráteknar og geta ekki verið notaðar á internetinu. Dæmi um slíkar tölur eru:

Ef við viljum eiga við hvernig tölvan okkar túlkar IP tölur og lén, getum við yfirskrifað með hosts skrá (/etc/hosts á mac og linux, C:\Windows\System32\Drivers\etc\hosts, til að breyta þarf stjórnandaréttindi). Þessi skrá inniheldur möppun á milli IP tölu og léns, t.d.:

127.0.0.1  localhost
::1        localhost
# Allar fyrirspurnir á hi.is munu fara á okkar
# vél en ekki vefjón HÍ og því ekki virka!
127.0.0.1  hi.is

1.1.3 Vefurinn 

Vefurinn (e. World Wide Web) er aðgengilegur yfir internetið og byggir á vefsíðum sem eiga sér ákveðið URL (Uniform Resource Locator) sem staðsetur þær. Þær eru sóttar yfir HTTP.

1.1.4 Vefþjónn 

Vefþjónn (e. web server) er tölva sem tengd er internetinu og getur tekið við og svarað beiðnum sendum yfir HTTP á ákveðið URL. Vefþjónar hafa IP tölu og geta átt sér skilgreint lén, eða lénsnafn (e. domain name) sem er túlkað með DNS.

Vefþjónar hafa „opin port“, tölulegt staðfang sem skilgreinir hvaða ferli44 ferli (e. process) er tilvik af forriti, það er möguleiki á að sama tölvan keyri mörg tilvik af sama forriti, t.d. ein tölva sem svarar fyrir margar IP tölur. tekur við beiðnum sem koma yfir net. Port 0–1023 eru vel skilgreind og aðeins er hægt að „bindast þeim“ (tengja ferli við port) ef notandi er stjórnandi (eða ofurpaur, e. superuser) á vefþjóni.

Dæmi um vel skilgreind port:

Oftast þegar forritarar vinna á eigin tölvum með HTTP, er port valið sem er utan vel skilgreindslista, t.d. 3000, þá er hægt að nálgast eigin tölvu með URL http://localhost:3000/.

1.1.5 HTTP 

HTTP stendur fyrir HyperText Transfer Protocol, samskiptareglur sem skilgreina hvernig dreift kerfi tölva vinnur saman yfir vefinn og skiptist á gögnum með hypertext, sem við munum læra meira um í samandi við HTML.

Fyrstu staðlar HTTP voru HTTP 1.0 og síðar HTTP 1.1, sem var formlega staðlaði samskiptareglurnar. Árið 2021 er HTTP/2 notkun að nálgast 50% á vefnum og HTTP/3 er formlega í vinnslu.

1.1.6 URL 

URL staðsetja og skilgreina hvernig við sækjum vefsíður yfir HTTP. Þau samanstanda af:

Dæmi um URL er http://example.org/example.html?start=true#kafli2 sem sækir vefsíðuna example.html á vefþjóninn example.org með http. Aukalega er start breytan send með gildið true. Vafrinn ætti að færa staðsetningu innan síðunnar að auðkenninu kafli2.

Í HTTP staðlinum er talað um URL og URI. Hvert um sig hefur nákvæma skilgreiningu, en munurinn er ekki augljós. Nýr, lifandi staðall, sameinar þessi tvö hugtök undir URL.

1.1.7 Vefsíða 

Vefsíða er sett saman með HTML, CSS og JavaScript og kallast þessi samsetti hluti yfirleitt framendi (e. front-end). Flóknari vefsíður hafa yfirleitt einhvern bakenda. Smíði vefsíðna er helsta viðfangsefni þessarar bókar.

1.1.8 Vafri 

Vafri er forrit sem hefur það hlutverk að sækja vefi sem eiga sér ákveðið URL yfir HTTP á vefþjón. Vafrinn túlkar það HTML, CSS og JavaScript sem vefsíðan inniheldur og birtir notanda.

Vafrar eru flókin forrit sem flestir hverjir geta túlkað milljarða vefsíðna. Þeir birta á skjánum það sem höfundar þeirra ætluðu sér, allt frá fyrstu árum vefsins í kringum 1990 og til þrívíðra leikja sem gerðir eru í dag. Til að geta þetta eru staðlar sem segja til um hvernig túlka eigi HTML, CSS og JavaScript.

Í anda þess hversu opinn vefurinn er höfum við í flestum vöfrum tækifæri til þess að skoða úr hverju hann er smíðaður með því að biðja vafrann um „view source“. Það að hafa aðgang að grunnkóða allra vefja á sama tíma og þeir eru skoðaðir hafði mikil áhrif á það hversu margir einstaklingar fóru að fikta og búa til sína eigin vefi.

1.1.9 Vefforrit 

Vefforrit er ekki vel skilgreint hugtak, en það er yfirleitt notað yfir forrit með ákveðið URL, aðgengilegt yfir vefinn, sem nýtir veftækni (HTML, CSS og JavaScript) til þess að útbúa viðmótið sem notandi sér.

Það að hafa URL er einn helsti styrkleiki vefsins, en með þeim hafa allir vefir ákveðna slóð sem við getum skoðað, deilt, leitað eftir, og nýtt án þess að nokkur miðstýring hafi eitthvað um það að segja, ólíkt t.d. „app stores“ þar sem fyrirtæki segir af eða á um hvort dreifa megi hugbúnaði eða ekki.

Vegna þess hve útbreiddur vefurinn er hafa margir staðlar verið útbúnir til að leysa hin ýmsu verkefni. Mörg forrit—ekki bara vafrar—nýta þessa staðla til að útbúa viðmót. Í dag er því hægt að nota vefforritun til að búa til forrit sem ekki bara birtast í vöfrum, t.d. textaritla, tónlistarforrit, öpp og ýmislegt fleira.

1.1.10 Framendi og Bakendi

Framendi (e. front-end eða client-side) er sá partur vefsins sem notendur sjá og eiga við. Í grunninn er framendi búinn til með HTML, CSS og JavaScript. Til þess að einfalda og flýta fyrir smíðum á stærri og flóknari vefjum eru til margskonar framework eða libraries sem hjálpa. Dæmi um þetta sem eru vinsæl í dag eru React, Angular og Vue. Þó svo að þessi tól geti hjálpað okkur, þurfum við að vita hvað þessi tól gera, og því byrjum við á að læra HTML, CSS og JavaScript, án nokkura hjálpartækja.

Bakendi (e. back-end eða server-side) er sá partur vefsins sem er sendur yfir HTTP til framenda. Bakendinn samanstendur yfirleitt af vefþjóni, forriti sem útbýr framenda og einhverri gagnageymslu (t.d. gagnagrunnur). Vefþjónar geta stutt margskonar forritunarmál (t.d. C# eða Python) og forritunarumhverfi (t.d. .NET eða Django).

Samskipti milli bakenda og framenda fara fram í gegnum HTTP.

Samskipti milli bakenda og framenda fara fram í gegnum HTTP.

Mynd frá höfundi.

Stundum er talað um full stack forritun, en það er þegar forritari er fær í bæði framenda og bakenda forritun.

1.2 Fyrsti vefurinn okkar 

Til að byrja vegferð okkar sækjum við textaritil, opnum hann og búum til nýtt skjal. Hið klassíska til að skrifa er „halló, heimur“ eða „hello, world“ og fá það til að birtast á skjánum. Því getum við afritað eftirfarandi inn í textaritil:

<h1>Halló, heimur!</h1>

og vistað skjalið sem index.html einhversstaðar þar sem við finnum það. Því næst opnum við vafra og með File > Open veljum við skjalið (eða með því að draga skjalið á vafra gluggann) og sjáum textann á skjánum.

Þegar við opnum skjalið svona beint á tölvunni okkar erum við ekki að nýta okkur bakenda eða vefþjón, heldur er vafrinn að opna skjalið beint af tölvunni, það sést á því að skjalið kemur ekki frá http://example.org eða http://localhost heldur file://mappa/index.html eða álíka. Þetta er í fínu lagi í fyrstu en þegar farið er að gera flóknari hluti þurfum við að keyra vefþjón á tölvunni okkar.

Ástæðan fyrir því að við notum index.html er sú að það skjal er notað sem sjálfgefna skjalið þegar mappa er opnuð, t.d. ef við höfum möppu sem heitir about á vefþjóninum okkar á example.org og innan í henni er skjalið about.html. Ef við opnum http://example.org/about fengjum við ekkert upp55 í sumum tilfellum sjáum við skráaryfirlit (e. directory index) sem sýnir allar aðgengilegar skrár og möppur á vefþjón., aðeins ef við opnum http://example.org/about/about.html, hinsvegar ef við nefnum skránna í staðinn index.html myndi vefurinn birtast bæði ef við opnum http://example.org/about og http://example.org/about/index.html.

1.2.1 FTP 

Til þess að koma vefsíðunum okkar yfir á vefþjóna eru nokkrar leiðir, en sú elsta er að nota FTP (File Transfer Protocol) eða SFTP (þar sem S stendur fyrir Secure eða SSH66 Secure Shell (SSH) er samskiptastaðall sem leyfir örygg samskipti yfir óöruggt net). FTP leyfir okkur að opna stað í skráarkerfi vefþjóns og færa skrár fram og til baka.

Frítt og nothæft FTP forrit er t.d. Cyberduck fyrir Mac og Windows. Oft hefur verið mælt með FileZilla en frá og með 2018 hefur óæskilegum hugbúnaði verið dreift með forritinu svo ekki er mælt með að nota það.