Safe (HTTP-Methoden)
Eine HTTP-Methode ist sicher, wenn sie den Zustand des Servers nicht verändert. Mit anderen Worten, eine Methode ist sicher, wenn sie zu einem schreibgeschützten Vorgang führt. Mehrere gängige HTTP-Methoden sind sicher: GET
, HEAD
oder OPTIONS
. Alle sicheren Methoden sind auch idempotent, aber nicht alle idempotenten Methoden sind sicher. Zum Beispiel sind PUT
und DELETE
beide idempotent, aber unsicher.
Auch wenn sichere Methoden eine schreibgeschützte Semantik haben, können Server ihren Zustand ändern: z.B. können sie protokollieren oder Statistiken führen. Wichtig ist hier, dass der Client durch den Aufruf einer sicheren Methode keine Änderung des Servers selbst anfordert und daher keine unnötige Last oder Belastung für den Server erzeugt. Browser können sichere Methoden aufrufen, ohne befürchten zu müssen, dem Server Schaden zuzufügen; dies ermöglicht es ihnen, Aktivitäten wie Pre-Fetching ohne Risiko durchzuführen. Web-Crawler verlassen sich ebenfalls darauf, sichere Methoden aufzurufen.
Sichere Methoden müssen nicht nur statische Dateien bereitstellen; ein Server kann eine Antwort auf eine sichere Methode spontan generieren, solange das erzeugende Skript Sicherheit garantiert: Es sollte keine externen Effekte auslösen, wie z.B. eine Bestellung in einem E-Commerce-Webseite auszulösen.
Es liegt in der Verantwortung der Anwendung auf dem Server, die sichere Semantik korrekt zu implementieren, da der Webserver selbst, sei es Apache, Nginx oder IIS, sie nicht eigenständig erzwingen kann. Insbesondere sollte eine Anwendung nicht zulassen, dass GET
-Anfragen ihren Zustand ändern.
Ein Aufruf einer sicheren Methode, die den Zustand des Servers nicht ändert:
GET /pageX.html HTTP/1.1
Ein Aufruf einer unsicheren Methode, die den Zustand des Servers ändern könnte:
POST /pageX.html HTTP/1.1
Ein Aufruf einer idempotenten, aber unsicheren Methode:
DELETE /idX/delete HTTP/1.1