Что такое безопасный (safe) HTTP-метод?

«Что такое безопасный (safe) HTTP-метод?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Безопасный (Safe) HTTP-метод — это метод, который по спецификации определен как не изменяющий состояние сервера. Его назначение — только для чтения или получения данных. Безопасность метода гарантирует, что повторные запросы не приведут к побочным эффектам на сервере.

Ключевые характеристики:

  • Только для чтения: Не создает, не изменяет и не удаляет ресурсы.
  • Идемпотентность не требуется: Безопасный метод может быть неидемпотентным (например, GET с уникальным идентификатором запроса в логах), но он все равно не должен менять данные.

Примеры безопасных методов:

  • GET — получение представления ресурса.
  • HEAD — получение только заголовков ответа (как GET, но без тела).
  • OPTIONS — запрос поддерживаемых методов для ресурса.
  • TRACE — диагностический запрос, возвращающий полученное сообщение (используется редко).

Примеры небезопасных методов (изменяют состояние): POST, PUT, DELETE, PATCH.

Практический пример и важность:

GET /api/products/123 HTTP/1.1
Host: example.com

Этот запрос безопасен. Веб-браузеры и поисковые роботы могут свободно выполнять такие запросы, не опасаясь изменения данных. Безопасность методов — основа для надежного кеширования и предварительной загрузки (prefetching) контента.