Warum sollte ich die POST-Daten nicht ERHALTEN?
Ich weiß, Sie wollen nicht zur POST ein Formular mit Benutzernamen und Passwort wo für jedermann die Geschichte zu sehen, oder Situationen, in denen wiederholen Sie die Aktionen werden möglicherweise nicht gewünscht (Seiten aktualisieren = das hinzufügen eines Artikels zu einem Warenkorb kann nicht gewünscht werden). Also ich habe auch Verständnis, wenn ich verwenden möchten, können einen über den anderen. Aber ich konnte immer den server umleiten, die URL nach einem BEKOMMEN, um rund um den Warenkorb problem und vielleicht die meisten von meinen Formularen funktioniert, sehr gut ERHALTEN.
Warum sollte ich POST mehr BEKOMMEN? Ich verstehe nicht die Vorteile des einen über den anderen. Ich merke BEITRAG nicht hinzufügen von Daten zu der Geschichte/URL und warnt Sie über die Seite aktualisieren, aber das sind die einzigen zwei Unterschiede, die ich kenne. Warum als Entwickler könnte ich wollen, verwenden Sie einen über den anderen?
Die Sinn machen. Was ist mit ajax klug? Ist es ein Unterschied, ob ich GET oder POST verwenden? Nichts kann Vorhersagen, die Daten sende ich, wenn ich ein paar javascript-Funktionen machen die Anfrage.
Prefetcher sollte kein problem für die AJAX-Anfragen, aber ich glaube immer noch, es ist eine gute Idee, zu bleiben, um die richtige Semantik: HOLEN Sie sich reqs dürfen keine Nebeneffekte haben auf dem server (also nicht erstellen, löschen oder ändern Sie nichts). Wenn Sie lediglich das abrufen von Daten (z.B. für eine auto-vervollständigen-Feld), und die übertragenen Daten klein genug, um passen in eine URL BEKOMMEN, sollte funktionieren. Im Gegensatz zu POST Antworten, ERHALTEN Sie Antworten können auch zwischengespeichert werden, das verbessert die app die wahrgenommene Leistung.
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede HTTP-Methode: POST, GET, PUT, DELETE, etc. Karies seine eigene Semantik. Bei der Wahl der richtigen Methode ist es wichtig zu verstehen, wie HTTP und REST, denn es ist der Weg HTTP gemeint war, um die Arbeit und die Art und Weise zugrunde liegende Netzwerk-Infrastruktur tätig ist.
Ein gutes tutorial auf den REST wird hier. Hier ist, was Sie sagt, über POST-und GET-Methoden:
Da das gleiche interface verwendet wird, für jede Ressource, die Sie sich verlassen können abrufen zu können, eine Darstellung, D. H., einige rendering — mit GET. Da der GET - Semantik sind definiert in der Spezifikation, können Sie sicher sein, dass Sie keinerlei Verpflichtungen ein, wenn Sie es nennen — dies ist der Grund, warum die Methode wird als "sicher". ERHALTEN ermöglicht Ihnen eine sehr effiziente und ausgeklügelte caching, so dass in vielen Fällen brauchen Sie nicht einmal zu senden Sie eine Anfrage an den server. Sie können auch sicher sein, dass ein GET idempotent — wenn Sie eine GET-Anforderung, und nicht ein Ergebnis bekommen, könnten Sie nicht wissen, ob Ihr Antrag sein Ziel nicht erreichen oder die Antwort verloren auf dem Weg zurück zu Ihnen.
Den idempotenz-Garantie bedeutet, können Sie einfach die Anfrage erneut. Idempotenz ist auch garantiert für SETZEN (was im Grunde bedeutet "zu aktualisieren, Ressource, mit diesen Daten, oder erstellen Sie es auf diesen URI, wenn es nicht bereits vorhanden") und LÖSCHEN (Sie können einfach versuchen, wieder und wieder, bis Sie ein Ergebnis erhalten, — das löschen von etwas, das nicht es ist nicht ein problem). POST, die in der Regel bedeutet "erstellen einer neuen Ressource", kann auch verwendet werden, um willkürliche Verarbeitung und somit ist weder sicher noch idempotent.
IMHO, Verständnis, RUHE ist der Schlüssel, um deine Frage zu beantworten. Fügte ich einen link zu einer anderen einführenden REST Artikel und zitiert den Abschnitt, in dem Sie erklären, sicheren und idempotenten Methoden. Es ist wichtig zu verstehen, die zugrunde liegenden web-Infrastruktur (proxies, gateways etc.) arbeiten im Einklang mit dem REST (oder HTTP-spec.).
InformationsquelleAutor
Alle Daten in einer
GET
Anfrage erfolgt in der URL, die eine Größenbeschränkung und ist auch für den Benutzer sichtbar. EinPOST
Anfrage ermöglicht Ihnen das senden einer Nutzlast als gut.Neben den technischen unterschieden, gibt es die Frage des Vorsatzes. Der HTTP-standard beschreibt die Möglichkeiten, die die verschiedenen Anforderungen (
GET
,POST
,PUT
,DELETE
,HEAD
) verwendet werden sollen; zum BeispielPUT
soll eine Ressource hinzufügen,DELETE
bestimmt ist, zu entfernen, undPOST
bestimmt ist, zu ändern. Konnte verwenden Sie einGET
- Anforderung statt einerPUT
oderDELETE
? Sicher, aber folgende standards macht die Absicht deutlich.Sehen http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html für mehr info.
Sie beziehen sich auf spezifische Implementierungen von clients und Servern. Wirklich, Sie sind frei zu tun, was Sie wollen. Es gibt nichts stoppen Sie, funktional, vom schreiben einer web-server, der entfernt die Ressourcen, die auf jeden
GET
, fügt Ressourcen auf jedenDELETE
usw. Aber Sie würde zornig werden, wenn Sie wurden der client und derGET
wurden, löschen von Ressourcen, denn das ist nicht das, was wir erwarten, ist geschehen. Deshalb ist der Vorsatz macht einen Unterschied.Anders ausgedrückt, in OOP könnte man Fragen, warum Sie verwenden sollten
getProperty()
nur zum abrufen einer Eigenschaft undsetProperty()
nur für die Einstellung, wenn Sie könnten, tun das Gegenteil genauso leicht. Mit einem standard hält uns davon ab, überrascht.funktional konnte ich eine javascript-aktivieren-Taste zum löschen einer Ressource. Ich kann nicht sehen, wie ein Benutzer kann es nicht erwarten, was, die Taste tun würde, wenn sein klar gekennzeichnet. (aber wirklich, wenn es mit der ajax-Sie konnte nicht sagen, ob es war get oder post). -edit - "einen standard hält uns davon ab, überrascht" <-- das ist aber mehr für die Programmierer, die dann die Benutzer? So clientwise macht es keinen Unterschied? (diese Frage ist so schwer für mich zu verstehen.)
InformationsquelleAutor
Wenn Sie möchten, eine idempotent request-URI (d.h. die Antwort ist immer das gleiche), dann verwenden BEKOMMEN, sonst POST.
Die Antwort ist nicht unbedingt das gleiche, es gibt einfach keine beobachtbaren Nebenwirkungen von wiederholten Anfragen. Diese Seite wird nicht immer gleich sein, aber mich mehrere Male gewonnen, nicht dazu führen, dass ein spürbarer Nebeneffekt (zumindest für mich, Jeff und Co. Möglicherweise eine Reihe von log-hits, etc. Aber diese sind für den Benutzer relevant)
Daneben Brackett: Also es klingt wie Sie sagen HOLEN ist erlaubt, ein prefetch-wo ist die post nicht. Aber prefetching ein Formular nicht Sinn und jetzt bin ich dabei es mit ajax, die auch keinen Sinn, denn es kann nicht Vorhersagen, die javascript input Sie benötigen.
InformationsquelleAutor
Unter anderem BEKOMMEN, ist begrenzt auf 2K (einige Browser akzeptieren mehr) und es ist sichtbar in der URL
InformationsquelleAutor
GET und POST haben eine semantische Bedeutung - GET wird zum abrufen einer Ressource und POST wird verwendet, um es zu ändern. Die Semantik ist, warum Sie bemerken die Unterschiede in der Umsetzung Ihrer web-browser - da die POST angeblich Daten ändert, ein browser sollte Sie warnen vor dem erneuten senden einer POST-Anforderung/- Befehl.
Nicht die Gesamtheit des web geht auf die Semantik. Es ist sicher zu cache eine GET-Anforderung, aber nicht ein POST-Befehl - also, was die caching-proxies zu tun. Es ist sicher zu ERHALTEN, einer Ressource mehrere Male, also Sie haben den link vor fetchers, die genau das tun. Es ist sicher zu Lesezeichen und aktualisieren Wird, so gibt es keine Warnung vom Browser, etc., etc.
Das heißt, es gibt keine Sicherheits-Unterschied - also der Benutzername Kennwort Beispiel, das Sie geben, ist nicht gerade präzise. Nach ist so leicht manipuliert oder angezeigt BEKOMMEN.
sagt nur nicht Zwischenspeichern.
InformationsquelleAutor