Forum: Mikrocontroller und Digitale Elektronik Daten vom Browser an den Webserver senden


von Frank aus Köln (Gast)


Lesenswert?

Hallo zusammen,

ich habe mir einen Webserver mit dem berühmt berüchtigten ENC28J60 
gebaut.
Arp, ICMP, UDP, TCP/IP und ein bisschen HTML läuft schon, allerdings 
hänge ich im moment an dem problem fest, Daten an den Webserver zu 
senden.
Ich möchte auf meiner HTML Seite im Controller einen Button integrieren.
Der Benutzer soll dann mit diesem Button z.B. den Zustand an irgendeinem 
Portpin steuern können.
Mit dem GET kommando kann ich ja schön filtern und dem Browser eine 
gewünschte datei zurücksenden.
Bei GET kommt z.B. als String an "GET /Img1.gif".
Danach kann man suchen und dann diese Datei zurücksenden.
Aber wie funktioniert das mit dem POST kommando.
Mir würde es reichen wenn ich nach einen String suchen könnte, z.b.
"POST /Button1". Noch schöner wäre wenn ich das auf der Controllerseite 
nur noch mit einem Ack beantworten müsste, evtl. mit dem Hinweis das der 
Browser die Seite neu laden soll.
Ist sowas einfach in HTML zu verwirklichen, oder muss ich mir jetzt auch 
noch irgendwelche Scriptinterpreter auf meinen Controller basteln.

Vielen Dank für eure Hilfe

Gruß

Frank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

GET packt die Argumente in die URL, POST packt sie in den HTTP-Header. 
Das ist der wesentliche Unterschied.

Warum willst Du GET nicht verwenden?

von Frank aus Köln (Gast)


Lesenswert?

Hallo Rufus, das ging ja schnell,

das genau ist der Knoten in meinem Hirn, wenn ich das richtig verstanden 
habe erwartet ein Browser ja bei einem GET eine datei zurück.
Ich habe aber keine Ahnung wie ich dem Browser antworten soll.
Gibt es irgendeinen HTML Code den ich dem Browser zurücksenden kann.
Getreu dem motto ich hab dich verstanden, aber ich sende dir keine daten 
und du musst nix machen ?

Gruß

Frank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Browser erwartet sowohl bei GET als auch POST Daten zurück.

Das sollte die anzuzeigende HTML-Datei sein, eventuell um durch den 
GET/POST-Vorgang veränderte Daten aktualisiert.

Ein Grund, POST anstelle von GET zu verwenden wäre das Senden sehr 
großer Datenmengen an den Webserver (Dateiupload etc.), ein anderer ist, 
daß die GET-Daten als Bestandteil der URL im Browsercache zu finden 
sind:

 http: //bla.fusel.de/laber.htm?schwall&suelz

hier sind schwall und suelz die per GET übertragenen Argumente.

In sicherheitsrelevanten Anwendungen möchte man das nicht; per POST 
können auch verschlüsselte Daten übertragen werden.

Das aber scheint bei Deiner Anwendung nicht erforderlich zu sein.

von Frank aus Köln (Gast)


Lesenswert?

Ja, das ist es,

d.h. bei mir kommt GET /bla.fusel.de/laber.htm?schwall&suelz an.
Dann mache ich die Aktion die bei schwall&suelz gemacht werden soll
und dann schicke ich die HTML Seite zuück die gerade im Browser 
angezeigt wird. In diesem Fall /bla.fusel.de/laber.htm.

Manchmal braucht man doch mal einen schlag auf den Hinterkopf.

Vielen Dank

Gruß

Frank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Viel Erfolg.

Schicker kann man das ganze mit etwas Javascript machen - das kann dann 
per XMLHttpRequest asynchron die Nutzdaten senden/empfangen und in der 
bereits geladenen Seite HTML-Elemente aktualisieren. Dadurch wird die 
übertragene Datenmenge deutlich reduziert (schließlich muss nicht die 
ganze Seite neu übertragen werden) und der Benutzer sieht eine Seite, in 
der sich automatisch einige Werte aktualiseren.

Das ist Grundlage der derzeit mit massivem Hype durch die Dörfer 
getriebenen Sau namens AJAX.

von Frank aus Köln (Gast)


Lesenswert?

Werde ich mir auf jeden Fall auch mal angucken, soll vielleicht auch mal
ein Thermometer o.ä. werden, wär dann nicht so schön wenn sich die 
gesamte Seite aktualisiert. Hast Du da vieleicht einen Link wo man sich 
mal ein bisschen einlesen kann ?

Gruß

Frank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich habe mir den erforderlichen Krams bei selfhtml angelesen, aber das 
liefert nicht wirklich ein knackiges kleines Beispiel.
Einen guten Tip kann ich Dir diesbezüglich nicht geben, abgesehen davon, 
daß Du als "Entwicklungswerkzeug" unbedingt Firefox verwenden solltest, 
denn für den gibt es das Plugin/Addon "venkman". Das ist ein 
Javascript-Debugger, mit dem man, wie es sich gehört, Breakpoints setzen 
kann und Variableninhalte ansehen kann.
Das Teil hat mir sehr geholfen.

von Frank aus Köln (Gast)


Lesenswert?

Na denn werde ich mich mal durchwurschteln, Selfhtml wäre meine erste 
anlaufstelle gewesen.

Danke für den Tip

Gruß

Frank

von F. K. (freddy436)


Lesenswert?

Solltest du es ohne JavaScript (AJAX) über normale seitenaufrufe machen 
wollen, solltest du die eventuell auch nochmal die HTTP Status Codes 
angucken.
http://de.selfhtml.org/servercgi/server/httpstatuscodes.htm
"200 OK" wirst du vermutlich schon kennen.
"307 Temporary Redirect" verwendet man in solch einem Falle häufig um 
dem Browser einfach wieder zur letzten Seite "weiterzuleiten".
"204 No Content" oder auch "205  Reset Content" ist vermutlich genau das 
was du suchst, das sagt dem Browser  eigentlich das der Server zwar 
etwas gemacht hat aber nichts zurück kommt (Der Browser sollte die Seite 
nicht wechseln, bzw. die alte Seite neu laden).

Der Vorteil von den Status Codes gegenüber AJAX ist das es eigentlich 
jeder noch so alter Browser kapiert und kein JavaScript nötig ist.

von Läubi (Gast)


Lesenswert?

Besser wäre aber dann doch der Status "304 Not Modified" ;)
Das sollte den Brwoser veranlassen die Seite aus dem cache zu laden.
Ansosnten steht hier http://de.wikipedia.org/wiki/HTTP wie son HTTP 
header ausehen kann.
Ich würds aber sonst echt einfach über Checkboxen oder so machen das sit 
das einfachste... Javascript und so find ich hier übertrieben, das die 2 
kb neu geladen werden nach dem Absenden ist ja nun kein verlust...

von F. K. (freddy436)


Lesenswert?

Läubi wrote:
> Besser wäre aber dann doch der Status "304 Not Modified" ;)

Ich denke das wird ein Problem wenn man z.B. Variablen per GET übergibt, 
da es die Ziel Seite (mit GET Parametern) Seite praktisch nicht gibt 
kann sie auch nicht im cache sein. Mit POST könnte es allerdings 
klappen. Ein anderes Problem könnte auftreten wenn der Browser den cache 
deaktiviert hat.

Mit "204 No Content/205  Reset Content" fährt man hier wohl am besten, 
sind schließlich auch genau für solche fälle vorgesehen.

von Frank aus Köln (Gast)


Lesenswert?

Hallo zusammen,

das mit dem HTML Code 205 klingt nicht schlecht.
Heisst das, das ich nur den HTML Header mit dem Code 205 zurückschicken 
muss und der Browser lädt dann die Seite nach ?

Muss der Header dann so in etwa aussehen ?

HTTP/1.0 205 Reset Content
Server: Franks ENC28J60
Content-Type: ?

Was muss in diesem  Fall eigentlich bei Content Type drinstehen ?
Eigentlich habe ich ja kein Content ?

Da ist man jetzt so weit gekommen und an diesen "blöden" HTML beisst man 
sich dann die Zähne aus.

Gruß

Frank

von F. K. (freddy436)


Lesenswert?

Frank aus Köln wrote:
> Heisst das, das ich nur den HTML Header mit dem Code 205 zurückschicken
> muss und der Browser lädt dann die Seite nach ?
Ja

> Muss der Header dann so in etwa aussehen ?
>
> HTTP/1.0 205 Reset Content
> Server: Franks ENC28J60
> Content-Type: ?
>
> Was muss in diesem  Fall eigentlich bei Content Type drinstehen ?
> Eigentlich habe ich ja kein Content ?
Wenn kein Content da ist auch kein Content-Type angeben.

In der Regel schickt man aber immer noch eine Fehlermeldungs Seite ("Ihr 
Browser versteht 205 Reset Content nicht, bitte verwenden Sie einen 
anderen Browser") als Content mit, die sollte der Browser dann anzeigen 
wenn er den status code nicht kapiert, da musst du dann als Content-Type 
text/html angeben.

von Frank aus Köln (Gast)


Lesenswert?

Ok, danke,

das werde ich mal versuchen.

Gruß

Frank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.