Zápisky z vývoje - HTTP POST a COOKIES
Poznatky z vlastních modifikací zdrojového kódu, tutoriály, nápady, vylepšení, rozšíření, nové funkce, pluginy, speciální úpravy
-
- R.I.P.
- Příspěvky: 4927
- Registrován: pát bře 04, 2011 11:36 am
Zápisky z vývoje - HTTP POST a COOKIES
Tak přátelé,
po poněkud delší odmlce (asi tak 2 roky) jsem se opět vrátil k aktivnímu vývoji Micrologu a po několika dnech vývoje po večerech jsem implementoval funkčnost HTTP Cookies a metody HTTP POST, což je nezbytnost, chceme-li implementovat zabezpečení webového rozhraní Micrologu pomocí hesla.
POST bylo nutno implementovat zejména kvůli faktu, že Cookies se v HTTP requestu pomocí metody GET posílají až za požadavkem GET, což je první řádek HTTP requestu.
Typicky:
Vzhledem k omezené paměti arduina a někdy velmi dlouhým parametrům v řádku s GET je nutno tyto parametry zpracovávat postupně po částech hned poté co přicházejí. V Micrologu je na toto ve funkci zabezpečující provoz webserveru pole typu char o délce maximálně 200 bajtů. Můžeme tedy uložit maximálně 200 bajtovou dávku parametrů a poté je už vážně musíme zpracovat, neboť další bajty z parametru nemáme kam uložit. Například program displaye při uložení z www rozhraní znamená velmi dlouhý parametr v dotazu GET. Ten ale zrovna v případě ukládání programu displaye zpracováváme po dvou bajtech přímým zápisem do EPROM hned poté co příjdou z ethernetového rozhraní. Navíc například i zápis programu displaye může proběhnout až teprve poté co si ověříme, že je uživatel skutečně přihlášen. Ověření bude probíhat pomocí Cookies.
Po přihlášení vznikne tedy takzvaný session a do odhlášení se nebude neustále dokola přenášet heslo v čitelné podobě, což by bylo velmi nebezpečné, ale jedinečný a pro daný session unikátní hash (například 1c3d5a64c58) uložený pomocí Cookies, který bude mít také omezenou platnost časově, pokud se zapomeneme odhlásit a bude zneplatněn i po odhlášení. Klasicky tak jako u jakýchkoliv jiných www aplikací.
Jelikož nejdříve potřebujeme tedy ověřit Cookies, zdali nám prohlížeč posílá platný session hash, bylo nutno přejít z metody GET na metodu POST pro delší parametry HTTP dotazu, které by se nám těžko umístily do paměti a které potřebujeme zpracovávat "on the fly". Delší parametry se totiž při metodě POST posílají až po odeslání Cookies, což je pro naše účely perfektní.
HTTP request metodou POST může tedy vvypadat třeba následovně:
Zbývá tedy implementovat
Změny jsou zatím pouze vývojové, kód tedy ještě není vydán a funguje pouze u mě na stole. Všímavější MyPoweristi a Micrologisti si zajisté ve stavu online loggerů povšimli verze 2.05sd. Tak tohle je ten vývojový Microlog. Hádejte proč sd. Proč.. no proč .... proooooooč? Protože chystám dokončit rozpracovanou podporu SD karty a ukládání dat primárně na úložiště na SD kartě a až v momentě dostupnosti internetu teprve synchronizaci na MyPower.CZ pokud bude mít takové zařízení zapnut přenos dat na MyPower.CZ. To znamená mimo jiné výhody i to, že i dlouhodobější výpadek internetového spojení (logování přes nestabilní GSM nebo wifi se slabším signálem, atd.) nebude v žádném případě znamenat díru v grafech a ztrátu dat, jako je tomu nyní bez podpory SD karty. Jednoduchý důvod, data bez SD karty prostě není bez funkčního internetového spojení kam ukládat.
Mimo jiné www rozhraní dostálo designových změn a vylepšení oproti staré verzi. Screenshoty budou k dispozici v následujícím zápisku. Vzhledem k tomu, že jsem se vrátil k aktivnějšímu vývoji micrologu, budu teď zápisky z vývoje psát zřejmě častěji, aby se přínivci Micrologu, jejichž počet se za tu dobu značně rozrostl, měli na co těšit a podporovatelé věděli co vlastně podporují.
Pochopitelně dobrovolný support na vývoj projektu Microlog je více než vítán a aktivní, významní a pravidelní supportéři budou mít zcela jistě značné výhody v individuální podpoře z mé strany tak, jak tomu je doposud.
po poněkud delší odmlce (asi tak 2 roky) jsem se opět vrátil k aktivnímu vývoji Micrologu a po několika dnech vývoje po večerech jsem implementoval funkčnost HTTP Cookies a metody HTTP POST, což je nezbytnost, chceme-li implementovat zabezpečení webového rozhraní Micrologu pomocí hesla.
POST bylo nutno implementovat zejména kvůli faktu, že Cookies se v HTTP requestu pomocí metody GET posílají až za požadavkem GET, což je první řádek HTTP requestu.
Typicky:
Kód: Vybrat vše
GET /nejakydotaz?parametry HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
Po přihlášení vznikne tedy takzvaný session a do odhlášení se nebude neustále dokola přenášet heslo v čitelné podobě, což by bylo velmi nebezpečné, ale jedinečný a pro daný session unikátní hash (například 1c3d5a64c58) uložený pomocí Cookies, který bude mít také omezenou platnost časově, pokud se zapomeneme odhlásit a bude zneplatněn i po odhlášení. Klasicky tak jako u jakýchkoliv jiných www aplikací.
Jelikož nejdříve potřebujeme tedy ověřit Cookies, zdali nám prohlížeč posílá platný session hash, bylo nutno přejít z metody GET na metodu POST pro delší parametry HTTP dotazu, které by se nám těžko umístily do paměti a které potřebujeme zpracovávat "on the fly". Delší parametry se totiž při metodě POST posílají až po odeslání Cookies, což je pro naše účely perfektní.
HTTP request metodou POST může tedy vvypadat třeba následovně:
Kód: Vybrat vše
POST /nejakydotaz? HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
dlouhe_predlouhe_parametry_http_dotazu_prakticky_nekonecne_ktere_zpracujeme_hned_jak_prichazi
- čas platnosti Cookies
- samotný mechaismus vytvoření hash ID po zaslání hesla
- přihlašovací formulář z www rozhraní
- funkčnost více přihlášených uživatelů současně, tedy úložiště pro hash ID, zřejmě pouze omezený počet.
- odeslání cookies do prohlížeče pomocí HTTP Headeru Set-Cookie.
- nastavení hesla
- reset hesla zřejmě propojením nějakého rezervovaného pinu při bootu micrologu
- ... na něco ještě příjdu.
Změny jsou zatím pouze vývojové, kód tedy ještě není vydán a funguje pouze u mě na stole. Všímavější MyPoweristi a Micrologisti si zajisté ve stavu online loggerů povšimli verze 2.05sd. Tak tohle je ten vývojový Microlog. Hádejte proč sd. Proč.. no proč .... proooooooč? Protože chystám dokončit rozpracovanou podporu SD karty a ukládání dat primárně na úložiště na SD kartě a až v momentě dostupnosti internetu teprve synchronizaci na MyPower.CZ pokud bude mít takové zařízení zapnut přenos dat na MyPower.CZ. To znamená mimo jiné výhody i to, že i dlouhodobější výpadek internetového spojení (logování přes nestabilní GSM nebo wifi se slabším signálem, atd.) nebude v žádném případě znamenat díru v grafech a ztrátu dat, jako je tomu nyní bez podpory SD karty. Jednoduchý důvod, data bez SD karty prostě není bez funkčního internetového spojení kam ukládat.
Mimo jiné www rozhraní dostálo designových změn a vylepšení oproti staré verzi. Screenshoty budou k dispozici v následujícím zápisku. Vzhledem k tomu, že jsem se vrátil k aktivnějšímu vývoji micrologu, budu teď zápisky z vývoje psát zřejmě častěji, aby se přínivci Micrologu, jejichž počet se za tu dobu značně rozrostl, měli na co těšit a podporovatelé věděli co vlastně podporují.
Pochopitelně dobrovolný support na vývoj projektu Microlog je více než vítán a aktivní, významní a pravidelní supportéři budou mít zcela jistě značné výhody v individuální podpoře z mé strany tak, jak tomu je doposud.
-
- Příspěvky: 7694
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Zápisky z vývoje - HTTP POST a COOKIES
neuvěřitelný, co se do kousku paměti v arduinu dá dostat. Škoda že programování HTTP je v arduinu tak komplikovaný na rozdíl od běžnýho webserveru jako apache+mysql, IIS2 a podobně. Je mi jasný, že většina webu je na externím serveru, je to tak? A co aplikace HTTPS, to už asi v možnostech W5100 nebude. Jenom takový nástřel: arduino yun - příp yduino yunshield - na arduinu nasazenej shield s ARM a linuxem, tam je to webový rozhraní easy, ale dál jsem s tím nepokročil.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 10 Odpovědi
- 1541 Zobrazení
-
Poslední příspěvek od rottenkiwi
-
- 7 Odpovědi
- 813 Zobrazení
-
Poslední příspěvek od bol-St
-
- 1 Odpovědi
- 553 Zobrazení
-
Poslední příspěvek od lzahradil