Что означает и каковы причины HTTP-статуса 405?

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

Ответ

Статус 405 Method Not Allowed означает, что HTTP-метод, использованный в запросе (например, POST, PUT, DELETE), не поддерживается целевым URL для данного ресурса.

Основные причины:

  1. Неподдерживаемый метод: Запрос POST отправлен на эндпоинт, который обрабатывает только GET.
  2. Ошибка конфигурации сервера или маршрутизации: Метод явно не разрешен в настройках фреймворка или веб-сервера (Nginx, Apache).
  3. Ограничения CORS: Предварительный запрос OPTIONS может вернуть 405, если метод не разрешен политиками CORS.

Пример (Flask):

from flask import Flask
app = Flask(__name__)

# Роут разрешает ТОЛЬКО GET
@app.route('/api/resource', methods=['GET'])
def get_resource():
    return {'data': 'value'}

# POST запрос на '/api/resource' вызовет 405

Что проверить:

  • Документацию API на список допустимых методов для эндпоинта.
  • Реализацию роутинга на стороне сервера.
  • Заголовки ответа Allow, которые должны содержать список разрешенных методов.