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
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?
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
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.
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
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.
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
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.
Na denn werde ich mich mal durchwurschteln, Selfhtml wäre meine erste anlaufstelle gewesen. Danke für den Tip Gruß Frank
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.
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...
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.