Webgrundlagen

baigox

Mitglied
Hallo liebe tutorials.de Gemeinschaft,

ich bin dabei mir ein Framework für einen Webserver für C++ Programme zu schreiben. Einen den ich Verstehe und der einfach ist.(Ich halte nichts vor riesigen unverständlichen unkommentierten Ansammlungen von Code, der IRGENDWIE funktioniert)

Was ich brauche ist alles, was normalerweise zwischen Server und Client passiert, alles gesendete.
Ich möchte alles verstehen, deswegen keine Komplettlösungen, sondern auch gute Erklärungen dazu, bitte.
Sprachen (C++, HTML, Deutsch, Englisch, usw) verstehe ich, was ich brauche ist der gesendete Inhalt und besonders dessen Bedeutung.

Fangen wir mit dem "Handshake" an:
Code:
GET / HTTP/1.1
Host: localhost:8080 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 
DNT: 1 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

Und nun die Antwort vom Server:

Code:
HTTP/1.1 200 OK
Connection: close
Content-type: text/html

<html>
<head>
<title>Hello, world!</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>

Die Anfrage, bitte komplett erklären, habe ich Klartext durch Ausgabe des vom Socket empfangenen bekommen und die Antwort, nur die ersten 3 Zeilen, hätte ich bitte auch gerne erklärt, da diese im Tutorial festgelegt, aber nicht erklärt wurden.

Außerdem möchte ich noch wissen, wie Cookies und HTML Formulare an den Server gesendet werden.

Es sollte mit allen gängigen Browsern funktionieren(IE, Chrome, Firefox, Safari und Mobile Browsern für Android, Windowsphone und iOS)

Wenn ihr Ausschnitte aus dem Quellcode oder andere Fragen(zu z.B. Compiler/OS/anderem) habt, oder noch etwas wissen müsst um mir zu helfen, bitte fragt mich danach.

Das wäre dann denke ich auch alles.

Baigox
 

sheel

I love Asm
Hi

vergiss die Idee am besten, da steckt viel mehr Arbeit drin als du vermutest.
Übrigens ist die Lösung zu deiner konkreten Frage sehr leicht ergoogelbar,
im Gegensatz zu komplexeren Sachen:
http://tools.ietf.org/html/rfc2616
(Schau dir die Länge des Texts an.
Ist nur der Anfang von einem von vielen Gebieten, in denen man sich sehr gut auskennen sollte.)

Wenn du etwas im Browser aufrufen können willst,
das von deinem C/C++-Programm bereitgestellt wird:
Für kleine einfache Sachen wirds etwas wie https://github.com/cloudmeter/pion tun,
sonst kann man eigene Programme auch mit Apache etc. in Verbindung bringen.
 

baigox

Mitglied
Frage: Ist das wirklich alles nötig für einen Webserver?
oder sind da viele historische Überbleibsel drin?

Nun, die Programme sollen benutzerfreundlich sein, daher kann man einen Anschluss an Apache schon mal ausschließen.

Das mit dem Pion werde ich mir mal anschauen, danke dir.

Wobei ich beim googlen nur kostenpflichtiges und undokumentiertes gefunden habe, teilweise sogar für java und nicht für C++

Nebenbei, der server muss nichts kompliziertes können, lediglich html seiten mit informationen schicken und html formulare annehmen können, das mit den cookies ist nur nebensächlich, wünschenswert, aber das muss nicht unbedingt sein.
 

sheel

I love Asm
Frage: Ist das wirklich alles nötig für einen Webserver?
oder sind da viele historische Überbleibsel drin?
Ja, ist nötig.
HTTP1.1 hat zwar schon ein paar Jahre hinter sich,
ist aber nach wie vor zu 100% gültig.

Einiges aus dem Dokument wird man im echten Leben zu 99% nicht antreffen,
aber der verbleibende eine Prozent eben...
Solange ein Programm nicht irgendwie mit allem davon umgehen kann
zählts offiziell nicht zu HTTP-komptibel.

Einige Sachen haben auch die Möglichkeit, dass dein Programm einfach etwas zurückschickt,
was "Nicht unterstützt" bedeutet. Aber zumindest das muss auch für alles programmiert werden.

Nebenbei, der server muss nichts kompliziertes können, lediglich html seiten mit informationen schicken und html formulare annehmen können, das mit den cookies ist nur nebensächlich, wünschenswert, aber das muss nicht unbedingt sein.
Zwischenfrage: Woher und wozu kommen bei reinem HTML/CSS die Cookies?
Und wohin gehen die Formulareingaben?

Bitte Netiquette beachten.
 

baigox

Mitglied
Danke, dass du mir so hilfst.
Cookies sind ja Javascript...
Ich bring die einzelnen Sprachen zu leicht durcheinander, wenn sie immer zusammen verwendet werden.

Nun, es soll nicht "HTTP kompatibel" sein, sondern nur Statusmeldung über http ausgeben und Befehle erhalten.

Es ist auch kein weiteres "Website Hosting" Programm, sondern eines, das Daten in ein Laufendes Programm eingibt und ausgibt.

Auch die Übertragung ist kein Problem, denn ich kann den, oben geschriebenen, Antwort-string einfach direkt senden, was auch funktioniert, ich möchte nur wissen, was es bei der Übertragung zu beachten gibt und warum es funktioniert.

Damit ich z.B. die nächste Herausforderung meistern kann, welche wäre ein "ico" zu übertragen, genauer das "favicon.ico"
 

sheel

I love Asm
Cookies sind ja Javascript...
Nicht wirklich
Nun, es soll nicht "HTTP kompatibel" sein, sondern nur Statusmeldung über http ausgeben und Befehle erhalten.
Das ist das Selbe.
Wenn du willst, dass dein Programm mit Browsern etc. zusammenarbeitet
musst du dich eben an den Standard halten.
Es ist auch kein weiteres "Website Hosting" Programm, sondern eines, das Daten in ein Laufendes Programm eingibt und ausgibt.
Was?
Auch die Übertragung ist kein Problem, denn ich kann den, oben geschriebenen, Antwort-string einfach direkt senden, was auch funktioniert, ich möchte nur wissen, was es bei der Übertragung zu beachten gibt und warum es funktioniert.
Nein, du kannst nicht einfach irgendwas senden.
zB. Stichwort Zeichensatz.
Und der richtige Antwortstring hängt stark vom Anfragestring ab.
Damit ich z.B. die nächste Herausforderung meistern kann, welche wäre ein "ico" zu übertragen, genauer das "favicon.ico"
Siehe das verlinkte RFC oben und/oder weitere RFCs (Mime...) :rolleyes:

Glaubs mir einfach, es ist nicht so trivial wie du denkst.
 

baigox

Mitglied
uhm, wie auch immer, ich werde immer verwirrter :eek:

Das ist das Selbe.

und mit kompatibel meinte ich 100%
wenn es nur die gebrauchten 5% hat, reicht mir das vollkommen


Nun, ich will keine *.html oder *.php dateien an den User bringen, keinen Content, sondern beim Aufruf soll das Programm direkt eine Antwort schicken mit allen relevanten Infos.

Ich brauche wirklich keine Hilfe beim html teil, nur bei den Header Köpfen.




Mein Aktueller Stand:

Inhalt von html Dateien kann ich übermitteln, ich kann auch den Link aus der Adresse herausfiltern und mit beidem im Programm arbeiten.

Was ich brauche:

Wie sende ich Dateien wie Bilder oder ico an den User?

Wie empfange ich html Formulare? (Wobei ich denke ich mache es mit Buttons, die auf spezielle Links zeigen, die ich dann bei der nächsten Anfrage auswerten kann)

Und da du mir klar machen willst, wie kompliziert das alles wird... könntest du mir einfach zeigen wie es geht und versuchen so viel wie möglich( dann halt nicht alles) zu erklären?

http://tools.ietf.org/html/rfc2616 ist echt etwas hart.

und pion werde ich morgen gleich mal durchgehen.

vielleicht ist das echt einfacher.( wobei ich mit etwas, das ich wirklich zu 100% verstehe glücklicher bin.)
 

sheel

I love Asm
und mit kompatibel meinte ich 100%
wenn es nur die gebrauchten 5% hat, reicht mir das vollkommen
Und was sind die gebrauchten 5%?
...genau, das kann man nicht voraussagen.
Alles, was irgendwie von einem Client kommt, muss eine angemessene Reaktion bekommen.
Ich brauche wirklich keine Hilfe beim html teil, nur bei den Header Köpfen.
Und du bist dir ganz sicher, dass du verstehst, was ein Charset/Zeichensatz ist? :rolleyes:
Wie sende ich Dateien wie Bilder oder ico an den User?

Wie empfange ich html Formulare? (Wobei ich denke ich mache es mit Buttons, die auf spezielle Links zeigen, die ich dann bei der nächsten Anfrage auswerten kann)

Und da du mir klar machen willst, wie kompliziert das alles wird... könntest du mir einfach zeigen wie es geht und versuchen so viel wie möglich( dann halt nicht alles) zu erklären?
Nein, kann ich nicht, auch wenn ich wollte.
a) Ich kann selbst nicht jedes Detail aus dem Kopf raus sagen
(und werde ich auch nie können. Viel zu viel.)
(Deswegen gibt es solche Dokumente)
und b) Würden wir dann noch nächstes Jahr mindestens hiersitzen, bei diesem Thema.
Aber das ist es leider. Und wie gesagt noch lang nicht alles, was man wissen muss.

Es hat schon einen Grund, warum noch nie irgendjemand sowas allein,
aber funktionierend und korrekt programmiert hat.
Und du wirst nicht der Erste sein.
 

Neue Beiträge