Nejnovější vylepšení klienta HTTP

Automaticky přeloženo z Deepl

Ve verzi 4D v19R6 jsme přinesli nový způsob provádění požadavků HTTP: HTTP třídy. V té době ještě nebyly některé funkce tříd HTTP finální, protože jsme je chtěli přizpůsobit nové syntaxi. Nyní je to hotovo! Ve verzi v19R7 jsou nyní dokončeny funkce komprimovaných odpovědí, chunked odpovědí a přesměrování.

Jako bonus jsme také přidali nový způsob protokolování požadavků HTTP. A protože je to užitečné pro všechny, je toto nové protokolování k dispozici jak pro nové třídy HTTP, tak pro starší syntaxi.

Nejprve mi dovolte, abych se zmínil o funkcích tříd HTTP. Ohlásili jsme a upravili fungování starší syntaxe tak, aby odpovídalo nové syntaxi. Zahrnuli jsme většinu jejích funkcí, konkrétně HTTP, proxy a ověřování serverů, přesměrování, chunked odpovědi a komprimované odpovědi. Přidali jsme také několik funkcí, například možnost zrušit požadavek nebo nové protokolování požadavků klienta HTTP (k tomu se dostanu v dalším odstavci). Poslední funkcí, o které musíme v nové syntaxi informovat, je perzistence spojení prostřednictvím keep-alive: brzy se objeví uvnitř mnohem výraznější funkce… kterou vám vysvětlím v jiném příspěvku na blogu. Zůstaňte naladěni!

Nyní si probereme nové protokolování HTTP klientů, které je k dispozici ve verzi v19R7.
Aktivace protokolování klienta HTTP je velmi jednoduchá; stačí do kódu přidat tento řádek:

HTTP SET OPTION(HTTP client log; HTTP enable log with all body parts)

A to je vše! Všechny vaše požadavky a odpovědi se budou zaznamenávat do souboru 4DHTTPClientLog_x.txt v adresáři Logs ve stejném formátu jako logy serveru.

Samozřejmě můžete požadavky a odpovědi zaznamenávat celé, ale pokud nechcete mít soubory protokolu zahlcené dlouhými odpověďmi, můžete odstranit těla odpovědí a dokonce i těla požadavků. Syntaxe je extrémně blízká aktivaci serverových protokolů, takže vás nepřekvapí.

Na závěr uvádíme příklad požadavku a jeho odpovědi (bez jejich těl) zapsaných do souboru protokolu klienta HTTP:

# REQUEST
# SequenceID: 7
# ConnectionID: DDF30D20070B0848B455971A0D627ED6
# LocalIP: 192.168.18.11:52097
# PeerIP: 192.168.4.7:3128
# TimeStamp: -1607148967
GET http://www.4d.com:80/ HTTP/1.1
Accept-Encoding: gzip, deflate
Connection: Close
Content-Length: 4
Content-Type: text/plain; charset=UTF-8
Date: Fri, 23 Sep 2022 09:30:58 GMT
Host: www.google.com
User-Agent: 4D_HTTP_Client/0.
[Body Size: 4]

# RESPONSE
# SequenceID: 6
# ConnectionID: 8EA22B111F16B04B92966DEFAA22704F
# LocalIP: 192.168.18.11:52090
# PeerIP: 192.168.4.7:3128
# TimeStamp: -1607191491
# ElapsedTimeInMs: 154
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Connection: close
Content-Encoding: gzip
Content-Length: 6185
Content-Type: text/html; charset=ISO-8859-1
Date: Fri, 23 Sep 2022 09:30:16 GMT
Expires: -1
Via: 1.1 proxy-squid (squid/3.5.27)
[Body Size: 6185]

Pokud máte k této nové funkci nějaké připomínky, neváhejte se o ně s námi podělit na oficiálním fóru 4D.

Nicolas Brachfogel
• Product Owner & Senior Developer • Nicolas Brachfogel nastoupil do 4D v roce 2017 jako senior vývojář (4D server a sítě). Jako Product Owner, který řídí vydání Apple Silicon, má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací a také zajišťuje, aby implementace funkcí vyhovovaly potřebám zákazníků. Nicolas, absolvent Institut Supérieur d'Informatique Appliquée (INSIA), začal svou kariéru jako softwarový vývojář v roce 2001. Po několika letech kódování v Javě a C++ se specializoval na vývoj klient-server pro společnosti zabývající se videohrami. Jako serverový vývojář/architekt úspěšně pracoval na serverových architekturách mnoha her (Dofus Arena, Drakerz, Trivial Pursuit Go!).