webentwicklung-frage-antwort-db.com.de

Was ist Idempotenz bei HTTP-Methoden?

Ich habe die HTTP-Dokumentation gelesen, kann jedoch nicht verstehen, was Idempotenz ist. Kann jemand helfen, bitte . Vielen Dank im Voraus.

10
ElGrig

Idempotency ist eine Eigenschaft von HTTP-Methoden. Eine Anforderung mit einer idempotenten HTTP-Methode kann mehrmals ausgeführt werden, und es wird dasselbe Ergebnis erzeugt. 

Verstehen Sie Ergebnis als Status der Ressource auf dem Server (und beachten Sie, dass Statuscodes aus Sicht der Idempotenz nicht relevant sind).

RFC 7231

Schauen wir uns den RFC 7231 an, das Dokument definiert die Semantik und den Inhalt des HTTP/1.1-Protokolls. Siehe die Zitate unten (Highlights sind meine).

HTTP-Methoden können safe sein:

4.2.1. Sichere Methoden

Request-Methoden gelten als "sicher", wenn ihre definierte Semantik im Wesentlichen schreibgeschützt ist; d. h., der Client fordert keine Zustandsänderung auf dem Origin-Server an und erwartet sie nicht als Ergebnis der Anwendung einer sicheren Methode auf eine Zielressource. [...]

Von den in dieser Spezifikation definierten Anforderungsmethoden sind die Methoden GET, HEAD, OPTIONS und TRACE als sicher definiert. [...]

Und/oder idempotent:

4.2.2. Idempotente Methoden

Eine Anforderungsmethode wird als "idempotent" betrachtet, wenn die beabsichtigte Auswirkung mehrerer identischer Anforderungen mit dieser Methode auf dem Server mit der Auswirkung einer einzelnen solchen Anforderung identisch ist. Von den in dieser Spezifikation definierten Anforderungsmethoden sind PUT, DELETE und sichere Anforderungsmethoden idempotent. [...]

Zusammenfassend werden die HTTP-Methoden als Folgende klassifiziert:

+---------+------+------------+
| Method  | Safe | Idempotent |
+---------+------+------------+
| CONNECT | no   | no         |
| DELETE  | no   | yes        |
| GET     | yes  | yes        |
| HEAD    | yes  | yes        |
| OPTIONS | yes  | yes        |
| POST    | no   | no         |
| PUT     | no   | yes        |
| TRACE   | yes  | yes        |
+---------+------+------------+  

RFC 5789

Der RFC 5789 definiert die PATCH -Methode, die weder sicher noch idempotent ist. Um jedoch Kollisionen zu vermeiden, kann PATCH request so ausgegeben werden, dass es idempotent ist, wie unten angegeben:

Eine PATCH-Anforderung kann so ausgegeben werden, dass sie idempotent ist, was auch dazu beiträgt, schlechte Ergebnisse durch Kollisionen zwischen zwei PATCH-Anforderungen auf derselben Ressource in einem ähnlichen Zeitraum zu verhindern. Kollisionen aus mehreren PATCH-Anforderungen können gefährlicher sein als PUT-Kollisionen, da einige Patch-Formate von einem bekannten Basispunkt aus ausgeführt werden müssen, da sonst die Ressource beschädigt wird. Clients, die diese Art von Patch-Anwendung verwenden, SOLLTEN eine bedingte Anforderung verwenden, sodass die Anforderung fehlschlägt, wenn die Ressource seit dem letzten Zugriff der Clients auf die Ressource aktualisiert wurde. Beispielsweise kann der Client in der ETag-Anforderung eine starke PATCH in einem If-Match-Header verwenden.

26
cassiomolin

Nach meinem Verständnis hat Idempotenz nichts mit dem Ergebnis (= Server Response) zu tun, sondern mit dem Server-Status nach einem oder mehreren Aufrufen.

Angenommen, Sie möchten eine Ressource auf dem Server durch Aufrufen löschen

DELETE /resource/123

Der Aufruf kann mit einem HTTP-Response 200 OK und der gelöschten Ressource als Nutzlast überhaupt erst zurückkehren. Bei einem zweiten Aufruf lautet die Antwort 204 NO_CONTENT, da die Ressource bereits beim ersten Aufruf gelöscht wurde.

Nach jeder Anforderung ist der Server-Status derselbe, daher ist die Idempotenz erfüllt. Das HTTP/1.1 sagt nichts über die Antwort aus

Eine Anforderungsmethode wird als "idempotent" betrachtet, wenn die beabsichtigte Wirkung auf Der Server mit mehreren identischen Anforderungen mit dieser Methode ist der das gleiche wie der Effekt für eine einzelne solche Anfrage

3
Peter Anderle

Eine idempotente HTTP-Methode ist eine HTTP-Methode, die viele Male ohne unterschiedliche Ergebnisse aufgerufen werden kann. Es spielt keine Rolle, ob die Methode nur einmal oder zehnmal aufgerufen wird. Das Ergebnis sollte dasselbe sein. Dies bedeutet im Wesentlichen, dass das Ergebnis einer erfolgreich ausgeführten Anforderung unabhängig davon ist, wie oft sie ausgeführt wird. In der Arithmetik beispielsweise ist das Hinzufügen von Null zu einer Zahl eine idempotente Operation.

POST ist NICHT idempotent. GET, PUT, DELETE, HEAD, OPTIONS und TRACE sind idempotent.

1> POST -> Jedes Mal, wenn Sie diese Methode aufrufen, wird ein anderes Ergebnis angezeigt. Warum -> Stellen Sie sich ein Szenario vor, in dem Sie neue Ressourcen erstellen. Jedes Mal, wenn Sie diese Methode aufrufen, werden neue Ressourcen erstellt. Sie erhalten jedes Mal ein anderes Ergebnis und daher ist POST (in einfachem Wort "Einfügen") keine idempotente Methode.

2> Andere geben Ihnen das gleiche Ergebnis

0
Mahesh Nighut