Wie in http://www.boutell.com/newfaq/misc/urllength.html angegeben, ist die Länge der HTTP-Abfragezeichenfolge begrenzt. Es kann durch den Client (Firefox, IE, ...), den Server (Apache, IIS, ...) oder die Netzwerkausrüstung (anwendbare Firewall, ...) begrenzt werden.Wie kann ich mit HTTP GET Abfragezeichenfolgenlängenbeschränkungen umgehen und möchte trotzdem RESTful sein?
Heute stelle ich dieses Problem mit einem Suchformular. Wir haben ein Suchformular mit vielen Feldern entwickelt, und dieses Formular wird als GET-Anfrage an den Server gesendet, damit ich die resultierende Seite als Lesezeichen speichern kann.
Wir haben so viele Felder, dass unsere Abfragezeichenfolge 1100 Bytes lang ist, und wir haben eine Firewall, die HTTP GET-Anfragen mit mehr als 1024 Bytes löscht. Unser Systemadministrator empfiehlt uns, stattdessen POST zu verwenden, damit es keine Beschränkung gibt.
Sicher, POST wird funktionieren, aber ich fühle wirklich eine Suche als GET und nicht als POST. Also denke ich, ich werde unsere Feldnamen überprüfen, um sicherzustellen, dass die Abfragezeichenfolge nicht zu lang ist, und wenn ich nicht kann, werde ich pragmatisch sein und POST verwenden.
Aber gibt es einen Fehler in der Gestaltung von RESTful-Diensten? Wenn wir eine begrenzte Länge in der GET-Anfrage haben, wie kann ich große Objekte an einen REST-fähigen Webservice senden? Zum Beispiel, wenn ich ein Programm habe, das Berechnungen basierend auf einer Datei durchführt, und ich möchte einen RESTful Webservice wie diesen bereitstellen: http://compute.com?content=<base64 file>
. Dies funktioniert nicht, da die Abfragezeichenfolge nicht unbegrenzt lang ist.
Ich bin ein wenig verwirrt ...
Was bedeutet erholsam in Bezug auf Ihren Kontext? Oder paraphrasieren: warum GET ist erholsam und POST ist nicht? Weil GET mit einfachen String-Verkettungen konstruiert werden kann? Die Abfragelängenbegrenzung dient dazu, die dynamische Speicherzuweisung in Apps zu vermeiden, die schnell arbeiten sollen. – khachik
Wenn ich eine Suche durchführen möchte, möchte ich nichts erstellen, löschen oder aktualisieren, ich möchte nur Daten abrufen, also sollte ich nicht POST, DELETE oder PUT verwenden, und ich sollte GET verwenden.So habe ich REST verstanden, aber ich könnte mich irren – cbliard
GET ist nicht geeignet für die Suche, weil sich die Ergebnisse einer Suche im Laufe der Zeit ändern können. Die Web-Infrastruktur ermöglicht häufig das Zwischenspeichern von GET-Anforderungen. Wenn Sie GET verwenden, riskieren Sie alte veraltete Ergebnisse für Suchen. POST ist der Weg, wie unten empfohlen. – occulus