Skip to content

Commit b29368b

Browse files
authored
Merge pull request #330 – Add an intro to HTTP
#330
2 parents 9e08fe4 + f9d885f commit b29368b

File tree

3 files changed

+184
-0
lines changed

3 files changed

+184
-0
lines changed

lessons/fast-track/http/index.md

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# HTTP – Jak funguje Internet
2+
3+
Než začneme pracovat s internetem – ať už tvorbou vlastních stránek, nebo
4+
komunikací s existujícími službami, pojďme si přiblížit, co vlastně ten
5+
internet je a jak funguje.
6+
7+
Internet je celosvětová síť počítačů.
8+
Je to spousta laptopů, stolních počítačů, malých blikajících krabiček
9+
i obrovských blikajících skříní, které jsou navzájem propojeny pomocí
10+
kabelů (nebo i bezdrátově).
11+
12+
Samozřejmě není každé zařízení propojené s každým jiným zařízením – tolik
13+
kabelů by se na Zemi těžko vešlo.
14+
Spousta zařízení – hlavně tzv. *routery* a *switche* – ale umí přeposílat
15+
zprávy mezi sebou tak, že každý počítač může komunikovat s každým
16+
jiným počítačem.
17+
(Aspoň teoreticky – reálně je komunikace omezená např. kvůli bezpečnosti.)
18+
19+
Funguje to podobně jako pošta: když pošlu balíček z Brna do Melbourne,
20+
nedostane se tam přímo.
21+
Balíček poputuje třeba vlakem do Prahy, pak letadlem do hlavní pošty
22+
v Austrálii a odtud náklaďákem do Melbourne, kde ho doručovatel donese až
23+
k domu příjemce.
24+
A k naplánování celé téhle cesty stačí napsat na obálku krátkou adresu.
25+
26+
Podobně cestují informace v internetu: z laptopu přes Wi-Fi do *routeru*,
27+
odtud kabelem k poskytovateli připojení, tlustším kabelem do české
28+
„páteřní sítě“, podmořským kabelem třeba do Ameriky… a nakonec k počítači,
29+
se kterým jsem chtěl komunikovat.
30+
31+
Většinou můj laptop takhle komunikuje se *serverem*, počítačem, který
32+
se stará o sdělování informací.
33+
Každou webovou stránku spravuje takový server.
34+
35+
## Webové adresy
36+
37+
Jak taková komunikace vypadá si ukážeme na příkladu –
38+
co se stane, když do prohlížeče zadám tuhle adresu:
39+
40+
```plain
41+
http://naucse.python.cz/lessons/fast-track/http/
42+
```
43+
44+
Taková webová adresa – technicky zvaná URL (*Uniform Resource Locator*,
45+
„jednotná adresa zdroje“) přesně určuje, jak se má prohlížeč dostat
46+
k informacím, které má zobrazit.
47+
48+
49+
Začátek adresy, `http://`, je jméno *protokolu* (angl. *protocol name*).
50+
Protokol určuje způsob, *jak* se k daným informacím dostat.
51+
Protokolů existuje spousta, každý funguje trochu jinak a každý se používá
52+
na něco jiného:
53+
SMTP a POP pro e-mail, FTP pro přenos souborů, SSH pro ovládání počítačů.
54+
My se teď ale zaměříme na HTTP, který se typicky používá pro webové stránky.
55+
56+
57+
Další část adresy, `naucse.python.cz`, je *jméno serveru* (angl. *server name*).
58+
Říká, *kde* prohlížeč najde dané informace.
59+
60+
Jméno serveru je jako poštovní adresa – existuje počítač, který se jmenuje
61+
`naucse.python.cz`, a každý internetový „pošťák“ ví, komu přeposlat zprávu,
62+
aby se k tomuto počítači nakonec dostala.
63+
64+
> [note]
65+
> „Skutečná“ adresa počítače, tzv. IP adresa, je číselná – například
66+
> `151.101.37.147` nebo `2a04:4e42:9::403`.
67+
> Existuje ale systém, jak jméno serveru na takovou *IP adresu* přeložit.
68+
> Tenhle systém se jmenuje DNS a – abychom zůstali u přirovnání k poště –
69+
> funguje podobně jako seznamy poštovních směrovacích čísel.
70+
71+
72+
Poslední část URL, `/lessons/fast-track/http/`, je *cesta* (angl. *path*).
73+
Říká, *co* chceme od serveru dostat: jméno konkrétní webové stránky.
74+
75+
U jednodušších stránek to může být přímo jméno souboru, který má server
76+
uložený na disku – proto spousta adres na Webu končí příponou `.html`.
77+
78+
79+
## Požadavek a odpověď
80+
81+
K získání požadované stránky prohlížeč vytvoří *požadavek* (angl. *request*)
82+
– zprávu „Pošli mi prosím stránku `/lessons/fast-track/http/`“ – a pošle ho
83+
serveru `naucse.python.cz`.
84+
85+
Server požadavek dostane a vrátí *odpověď* (angl. *response*) – zprávu
86+
s obsahem dané stránky.
87+
Obsah je často webová stránka v jazyce HTML, který popisuje co na stránce je,
88+
kde jsou nadpisy a kde odstavce, jak má stránka vypadat, a tak dále.
89+
Ale v odpovědi může být místo stránky i cokoli jiného – obrázek, video, nebo
90+
jiná data.
91+
92+
Veškerá komunikace přes HTTP funguje právě takto: pošle se požadavek
93+
a přijde na něj odpověď.
94+
95+
A jak tyhle zprávy vypadají?
96+
Požadavek nějak takhle:
97+
98+
```http
99+
GET /lessons/fast-track/install/ HTTP/1.1
100+
Accept: */*
101+
Accept-Encoding: gzip, deflate
102+
Connection: keep-alive
103+
Host: naucse.python.cz
104+
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
105+
```
106+
107+
První řádek říká serveru: prosím, pošli mi (`GET`) stránku
108+
`/lessons/fast-track/install/` s použitím protokolu `HTTP` verze `1.1`.
109+
Další řádky jsou *hlavičky* (angl. *headers*).
110+
Říkají například kdo se ptá (`User-Agent`) a jaký obsah očekává (`Accept`).
111+
Většina hlaviček je nepovinná.
112+
113+
Odpověď pak může vypadat takto:
114+
115+
```http
116+
HTTP/1.1 200 OK
117+
Cache-Control: max-age=600
118+
Connection: keep-alive
119+
Content-Encoding: gzip
120+
Content-Length: 3127
121+
Content-Type: text/html; charset=utf-8
122+
Date: Tue, 20 Feb 2018 15:51:24 GMT
123+
Last-Modified: Tue, 20 Feb 2018 15:20:08 GMT
124+
Server: GitHub.com
125+
126+
<!doctype html>
127+
<html lang="cs">
128+
<head>
129+
<meta charset="utf-8">
130+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
131+
<title>
132+
Python a jeho knihovny: HTTP – Jak funguje Internet
133+
134+
```
135+
136+
První řádek říká: používáme protokol `HTTP` verze `1.1`,
137+
a všechno je v pořádku (`200 OK`).
138+
Kromě `200` existují i další [stavové kódy] (angl. *status codes*).
139+
Známý je např. `404` „nenalezeno“.
140+
141+
[stavové kódy]: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
142+
143+
Následují opět hlavičky – např. kdo odpovídá (`Server`), kdy byla stránka
144+
naposledy změněna (`Last-Modified`) a jak je odpověď zakódovaná:
145+
`Content-Type: text/html` říká, že je to stránka v jazyce HTML.
146+
147+
Hlavičky jsou ukončené volným řádkem, po kterém následuje samotný obsah
148+
odpovědi ve zmíněném jazyce HTML.
149+
150+
151+
## HTTP Metody
152+
153+
Komunikace ukázaná výše používala metodu `GET`, která slouží ke *čtení*
154+
informací.
155+
Když se takto prohlížeč na nějakou stránku zeptá, nic se na serveru nezmění.
156+
Prohlížeč si takovou stránku – nebo třeba obrázek či video – může dočasně
157+
uložit, a když bude potřeba znovu, použít uloženou verzi.
158+
159+
Některými požadavky ale stav serveru mění: například se přihlásí uživatel,
160+
nakoupí zboží v e-shopu nebo odešle zpráva do diskuse.
161+
Tyto požadavky používají místo `GET` jinou *metodu* (angl. *method*).
162+
Co přesně která metoda na jaké adrese dělá, to záleží na autorovi stránek.
163+
Často se používají tyto metody:
164+
165+
* `GET` načte informace,
166+
* `POST` pošle na server informace, např. z formuláře, s cílem něco
167+
změnit nebo nastavit,
168+
* `PUT` přidá novou stránku (nebo jiný objekt),
169+
* `DELETE` něco smaže.
170+
171+
Seznam všech metod je ve
172+
[specifikaci](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html).
173+
174+
U složitějších požadavků se dají na server poslat i informace:
175+
webové formuláře se odesílají požadavkem, který používá metodu `POST`
176+
a vyplněné informace k dotazu „přilepí“ za hlavičky – stejným způsobem, jako se
177+
v odpovědi posílá HTML stránka.

lessons/fast-track/http/info.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
title: HTTP – Jak funguje Internet
2+
style: md
3+
attribution:
4+
- Pro naucse.python.cz napsal Petr Viktorin, 2018.
5+
- Inspirováno tutoriálem [Django Girls](https://tutorial.djangogirls.org/en/how_the_internet_works/)
6+
license: cc-by-sa-40

runs/2018/pyknihovny-jaro/info.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ plan:
2222
base: requests-click
2323
date: 2018-02-20
2424
materials:
25+
- lesson: fast-track/http
2526
- +merge
2627
- title: Zadání úkolu
2728
url: https://github.com/encukou/MI-PYT/blob/pyknihovny-2018/tutorials/01_requests_click.md#%C3%9Akol

0 commit comments

Comments
 (0)