<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>snaums.de - HTTP</title><link href="https://www.snaums.de/" rel="alternate"></link><link href="https://www.snaums.de/feed/tag-http.atom.xml" rel="self"></link><id>https://www.snaums.de/</id><updated>2014-08-03T18:32:00+02:00</updated><entry><title>HTTP-Server Update #1</title><link href="https://www.snaums.de/informatik/http-server-update-1.html" rel="alternate"></link><published>2014-08-03T18:32:00+02:00</published><updated>2014-08-03T18:32:00+02:00</updated><author><name>snaums</name></author><id>tag:www.snaums.de,2014-08-03:/informatik/http-server-update-1.html</id><summary type="html">&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;Nachdem ich vorgestern meinen Webserver mit Threads ausgestattet habe und die Threads per Linux-Semaphoren blockbar gemacht habe, habe ich noch einige weitere &amp;Auml;nderungen hinzugef&amp;uuml;gt. Zum einen wird nun der Content-Type und die Content-Length ordnungsgem&amp;auml;&amp;szlig; zur&amp;uuml;ckgegeben. Die Content-Length gibt die L&amp;auml;nge des HTTP-Bodies an, der Content-Type gibt den MIME-Typ des …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;Nachdem ich vorgestern meinen Webserver mit Threads ausgestattet habe und die Threads per Linux-Semaphoren blockbar gemacht habe, habe ich noch einige weitere &amp;Auml;nderungen hinzugef&amp;uuml;gt. Zum einen wird nun der Content-Type und die Content-Length ordnungsgem&amp;auml;&amp;szlig; zur&amp;uuml;ckgegeben. Die Content-Length gibt die L&amp;auml;nge des HTTP-Bodies an, der Content-Type gibt den MIME-Typ des Bodies an (zum Beispiel text/html oder image/png). Da im Moment fast nur statische HTML-Dateien unterst&amp;uuml;tzt werden, ergibt sich der MIME-Type des Inhalts aus der Dateiendung der zu lesenden Datei, und die L&amp;auml;nge ist die Dateigr&amp;ouml;&amp;szlig;e. Eine Abweichung gibt es allerdings, so wird PHP de facto bereits gerufen und die Ausgabe von PHP durch den Socket zur&amp;uuml;ckgeschrieben. Allerdings geben die PHP-Testskripte keine Ausgaben zur&amp;uuml;ck, die auch mit anderen Webservern wie Apache2 reproduzierbar w&amp;auml;ren, sondern werden offenbar teilweise nicht ausgef&amp;uuml;hrt sondern Teilskripte werden &amp;uuml;bertragen. Das sollte nat&amp;uuml;rlich auf garkeinen Fall passieren.&lt;/p&gt;
&lt;p&gt;Im aktuellen Zustand des Servers kann er bereits gespeicherte Websiten (getestet habe ich das mit der Startseite der Homepage der Technischen Universit&amp;auml;t Chemnitz), welche fast komplett richtig angezeigt wurde, allerdings konnten offenbar die Javascript-Dateien nicht &amp;uuml;bertragen werden, was zu kleineren Problemen f&amp;uuml;hrte. Es wurden aber die CSS, sowie die Bilddateien erfolgreich &amp;uuml;bertragen und konnten vom Browser angezeigt werden.&lt;/p&gt;
&lt;p&gt;Wie wird der Content-Type ermittelt? Ich habe mir ein simples Dateiformat &amp;uuml;berlegt, welches den Dateiendungen den entsprechenden MIME-Types zuordnet. Beim Start des Servers wird die Datei eingelesen und alphabetisch sortiert (wie in der Datei) in ein Array geschrieben. &amp;Uuml;ber dieses Array ist nun eine bin&amp;auml;re Suche m&amp;ouml;glich, was es mir erm&amp;ouml;glicht relativ schnell auch bei gro&amp;szlig;en Datenmengen und verschiedenen Dateitypen die richtige Zuordnung zu finden.&lt;/p&gt;
&lt;p&gt;Als n&amp;auml;chtes versuche ich die HTTP-Aktionen (GET, POST, HEAD, DELETE, ... ) zu unterst&amp;uuml;tzen und so vielleicht sogar einen kleinen Dateimanager &amp;uuml;ber HTTP zu implementieren. Desweiteren soll der Server HTCPCP (Hypertext Coffeepot Control-Protocol) unterst&amp;uuml;tzen. Langfristiges Ziel soll es sein, einen generischen Webserver zu implementieren, der sowohl Interpreter wie Python oder PHP starten kann, als auch C-Programme, die f&amp;uuml;r irgendwelche Funktionen zust&amp;auml;ndig sind. So soll es mir m&amp;ouml;glich werden, C-Programme zu schreiben, die HTML zur&amp;uuml;ckliefern, sodass der Server diesen Code zur&amp;uuml;ckgeben kann. Damit erhoffe ich mir einen erheblichen Geschwindigkeitsgewinn in der Seitenauslieferung als mit PHP oder Python. Au&amp;szlig;erdem muss am Speichermanagment des Servers gearbeitet werden, da er nicht den gesamten angeforderten Speicher ordentlich wieder freigibt. Daf&amp;uuml;r wird sich sicherlich noch eine L&amp;ouml;sung finden.&lt;/p&gt;</content><category term="Informatik"></category><category term="HTTP"></category><category term="Server"></category><category term="Thread"></category></entry><entry><title>HTTP-Server mit Threads</title><link href="https://www.snaums.de/informatik/http-server-mit-threads.html" rel="alternate"></link><published>2014-08-01T14:14:00+02:00</published><updated>2014-08-01T14:14:00+02:00</updated><author><name>snaums</name></author><id>tag:www.snaums.de,2014-08-01:/informatik/http-server-mit-threads.html</id><summary type="html">&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;HTTP ist das Protokoll, was f&amp;uuml;r das Web (gemeint ist, Webseiten, die im Browser angezeigt werden), Verwendung findet. HTTP ist relativ simpel aufgebaut, allerdings doch etwas schwieriger als Gopher [1]. Vor etwa einem halben Jahr habe ich einen minimalistischen Gopher-Clienten geschrieben, kurz darauf einen Parser, der HTTP versteht und …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;HTTP ist das Protokoll, was f&amp;uuml;r das Web (gemeint ist, Webseiten, die im Browser angezeigt werden), Verwendung findet. HTTP ist relativ simpel aufgebaut, allerdings doch etwas schwieriger als Gopher [1]. Vor etwa einem halben Jahr habe ich einen minimalistischen Gopher-Clienten geschrieben, kurz darauf einen Parser, der HTTP versteht und eine Datenstruktur, die ein ebenfalls etwa in der Zeit entstandener minimalistischer HTTP-Server f&amp;uuml;llen kann und senden kann.&lt;/p&gt;
&lt;p&gt;Heute habe ich diesen Prototyp durch Threads erweitert. Wenn ich diesem Webserver nun zwinge ein Bash-Kommando abzusetzen, was PHP oder andere Skriptsprachen-Interpreter ruft und die Ausgaben zur&amp;uuml;ckgibt, dann k&amp;ouml;nnte ich theoretisch Oettinger Games auf diesen Webserver umziehen. Dazu muss dann auch ein vServer her. H&amp;auml;tte nat&amp;uuml;rlich den Nachteil, dass der HTTP-Server im Moment noch garnicht konfigurierbar ist, also weder Threadzahl, noch was wie dargestellt wird und wann der Server wegen &amp;Uuml;berlast abriegelt.&lt;/p&gt;
&lt;p&gt;Als n&amp;auml;chstes sollten Konfigurationsdateien hinzugef&amp;uuml;gt werden. Dh. einen Parser schreiben und ggf. ein Programmteil, der die aktuellen Konfiguration abspeichern kann. Startparameter, die die geparsten Konfigurationen &amp;uuml;berschreiben, sind mit Sicherheit auch nicht schlecht. Danach fange ich wahrscheinlich an, ein Framework in C++ zu schreiben, um Webseiten, die von meinem Server aufgerufen werden in C++ zu verfassen. Darunter w&amp;uuml;rden dann solche angenehmen Dinge kommen wie MySQL-Anbindung und irgendeine Abstraktion von HTML und Javascript sowie Konfigurationsdateien davon.&lt;/p&gt;
&lt;p&gt;Ich bleib mal gespannt, was sich da noch tun wird.&lt;/p&gt;
&lt;p&gt;[1] http://de.wikipedia.org/wiki/Gopher&lt;/p&gt;</content><category term="Informatik"></category><category term="HTTP"></category><category term="Server"></category><category term="Thread"></category></entry></feed>