Ответ
Безопасные HTTP-методы — это те, которые не изменяют состояние ресурса на сервере. Они предназначены только для операций чтения, что делает их предсказуемыми и позволяет клиентам (например, браузерам или поисковым роботам) выполнять их повторно без побочных эффектов.
Ключевые безопасные методы:
**GET**: Запрашивает представление указанного ресурса. Является основным методом для получения данных.**HEAD**: АналогиченGET, но сервер возвращает только заголовки ответа, без тела сообщения. Используется для проверки метаданных ресурса (например,Content-LengthилиLast-Modified) без загрузки всего содержимого.**OPTIONS**: Запрашивает информацию о параметрах соединения для целевого ресурса. Например, чтобы узнать, какие HTTP-методы поддерживаются для данного URL (Allowзаголовок).
Важное различие:
Безопасность не следует путать с идемпотентностью. Идемпотентный метод (PUT, DELETE) при многократном повторении приводит к тому же результату, что и при однократном, но он может изменять состояние сервера. Безопасный метод (GET) не изменяет состояние в принципе.
Пример использования HEAD в Python:
import requests
# Проверяем размер файла перед его скачиванием
url = 'https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso'
try:
response = requests.head(url, timeout=5)
response.raise_for_status() # Проверка на ошибки HTTP
content_length = response.headers.get('content-length')
if content_length:
size_in_mb = int(content_length) / (1024 * 1024)
print(f"Размер файла: {size_in_mb:.2f} MB")
else:
print("Заголовок 'content-length' не найден.")
except requests.RequestException as e:
print(f"Ошибка запроса: {e}")