Безопасный (HTTP методы)
Метод HTTP является безопасным, если он не изменяет состояние сервера. Другими словами, безопасный метод производит операции "только для чтения". Следующие методы HTTP являются безопасными: GET
, HEAD
и OPTIONS
. Все безопасные методы являются также идемпотентными, но не все идемпотентные методы являются безопасными. Например, методы PUT
и DELETE
идемпотентные, но не безопасные.
Даже если безопасные методы являются по существу "только для чтения", сервер всё равно может изменить своё состояние, например, он может сохранять статистику. Важно то, что при вызове безопасного метода клиент не запрашивает никаких изменений на сервере, и поэтому не создаёт дополнительную нагрузку на сервер. Браузеры могут вызывать безопасные методы, не опасаясь причинить вред серверу, это позволяет им выполнять некоторые действия, например, предварительную загрузку без риска. Поисковые роботы также полагаются на вызовы безопасных методов.
Безопасные методы не обязательно должны обрабатывать только статичные файлы, сервер может и генерировать ответ "на лету", пока скрипт, генерирующий ответ, гарантирует безопасность: он не должен вызывать внешних эффектов, таких как формирование заказов, отправка писем и т.п.
Правильная реализация безопасного метода — это ответственность серверного приложения, потому что сам веб-сервер, будь то Apache, Nginx или IIS, не может обеспечить её соблюдение. В частности, приложение не должно разрешать изменение состояния сервера запросами GET
.
Вызов безопасного метода, не изменяющего состояние сервера:
GET /pageX.html HTTP/1.1
Вызов небезопасного метода, который может поменять состояние сервера:
POST /pageX.html HTTP/1.1
Вызов идемпотентного, но небезопасного метода:
DELETE /idX/delete HTTP/1.1