Anfang dieser Woche musste ich etwas tun, das sich wie eine Semantikverletzung anfühlt. Lassen Sie mich erklären.HTTP GET und POST Semantik und Einschränkungen
Ich machte eine einfache AJAX-Client-Anwendung, die eine Anfrage an einen Dienst mit einer bestimmten Anzahl von Parametern stellen sollte. Da die gesamte App grundsätzlich schreibgeschützt ist, dachte ich, dass die Verwendung von HTTP GET der richtige Weg ist. Einige der Parameter, die ich übergeben musste, waren einfach (z. B. die Sortierreihenfolge oder die Seitennummer).
Allerdings könnte einer der erforderlichen Parameter von variabler Länge sein, und das machte mir Sorgen. Da ich alle Parameter in der Querystring der GET-Anfrage codiert hatte, schien es mir, dass dies eine unnötige upper limit of (roughly) 2000 characters for the request URL platziert. Und natürlich habe ich keine 500 Zeichen langen Anfrage-URLs gesehen.
Also, da eine POST-Anfrage keine Einschränkung hat, entschied ich mich zu wechseln. Aber das fühlt sich nicht richtig an. Ich habe den Eindruck, dass ein POST eine Änderung der Daten bedeutet - aber ich benutze es für eine einfache schreibgeschützte Anfrage.
Gibt es einen besseren Weg, dies zu tun? Um ein GET mit vielen Parametern durchzuführen? Ich habe von einer Methode gehört - wo Sie eine vorläufige POST der Parameter selbst durchführen, und dann ein GET durchführen. Aber diese Technik lässt viel zu wünschen übrig.
Aber nach diesem spezifischen Fall, Was sind die wahren Semantiken und Einschränkungen von HTTP-Anfrage-Methoden? Und warum unterstützt GET keine Art von Parameter-Payload? Die Verwendung der Querystring in der URL fühlt sich fast wie ein Hack für mich an.
Warum glauben Sie, dass Post Datenänderung bedeutet? –
@ConradFrix: Wegen seiner Verwendung beim Senden von Formularen, beim Hochladen von Dateien und [allgemeine nicht-idempotente Aktionen.] (Http://en.wikipedia.org/wiki/POST_ (HTTP) #Affecting_server_state) – voithos
Wenn Sie sind eine Ajax-Anwendung schreiben, warum kümmert es dich, was die URL-Länge?Beachten Sie außerdem, dass die Begrenzung auf 2000 Zeichen nur für Browser-URLs gilt und nicht für Ajax-Anforderungen (wie in den Kommentaren zu dem von Ihnen dargestellten Link angegeben). –