501 Not Implemented
Применение
Код состояния 501 Not Implemented означает, что сервер не способен выполнить запрос из-за нехватки возможностей на своей стороне. Он схож с кодом состояния 405 Method Not Allowed, хотя 405 означает именно то, что запрошенный метод распознан, но не разрешён для целевого ресурса.
Код состояния 405 Method Not Allowed означает, что сервер распознаёт метод, но не допускает его для целевого ресурса. Код состояния 501 Not Implemented означает, что сервер не распознаёт метод либо не способен поддерживать его ни для какого ресурса. Это постоянное состояние уровня сервера.
Этот статус уместен, когда сервер не распознаёт метод запроса и, следовательно, не способен поддержать такой запрос ни для какого ресурса.
Влияние на SEO
Поисковые системы вроде Google не индексируют URL, возвращающий статус 501 Not Implemented. Ранее проиндексированные URL, возвращающие этот код состояния, удаляются из результатов поиска.
Некоторые API расширяют смысл 501 за пределы отсутствующих методов. API Shopify возвращает 501 Not Implemented, когда запрошенная конечная точка недоступна на текущем тарифном плане магазина, например если возможность ограничена планом Shopify Plus. Конечная точка существует в составе API, но закрыта уровнем подписки.
Пример
Клиент запрашивает ресурс, и сервер отвечает кодом состояния 501 Not Implemented, потому что метод запроса распознан, но пока не поддерживается.
Запрос
POST /requests?id=111&flag=start HTTP/1.1
Host: example.com
Ответ
HTTP/1.1 501 Not Implemented
Content-Type: text/html; charset=UTF-8
Content-Length: 148
<html>
<head>
<title>Function Not Implemented</title>
</head>
<body>
<p>This functionality is under development.</p>
</body>
</html>
Как исправить
Убедитесь, что метод HTTP в запросе указан верно. PATCH, отправленный серверу, ожидающему только GET и POST, вызывает 501, если у сервера вообще нет обработчика для этого метода.
Распространённые первопричины и их устранение:
Метод не поддерживается сервером. В Apache разрешёнными методами управляют директивы Limit и LimitExcept. В nginx фильтрация методов происходит в блоке location. Убедитесь, что метод, отправляемый клиентом, не исключён конфигурацией.
Отсутствующие модули сервера. Apache требует mod_dav для методов WebDAV, таких как PROPFIND и MKCOL. IIS требует WebDAV Publishing и правильных сопоставлений обработчиков. Включите модуль и перезапустите службу.
Обратный прокси вырезает или переписывает методы. Некоторые прокси преобразуют нестандартные методы в GET. В nginx убедитесь, что proxy_method не задан, если это не сделано намеренно. В AWS ALB подтвердите, что целевая группа поддерживает нужные методы HTTP.
Устаревшее серверное ПО. Старые сборки веб-серверов не поддерживают методы, стандартизированные после их выпуска. Обновите Apache, nginx или IIS до актуальной стабильной версии.
Блокировка межсетевым экраном или WAF. Веб-экраны уровня приложений и плагины безопасности иногда отклоняют методы вроде PUT, DELETE или OPTIONS. Пересмотрите правила WAF и внесите нужные методы для конечной точки в список разрешённых.
Возможность API ограничена уровнем тарифа. Платформы вроде Shopify возвращают 501, когда конечная точка существует, но недоступна на текущем уровне подписки магазина. Проверьте требования к тарифу для этой возможности в документации API и при необходимости перейдите на более высокий план.
На стороне клиента убедитесь, что URL запроса указан верно. Опечатка, направляющая трафик на неверный сервер или конечную точку, приводит к 501, если у принимающего сервера нет реализации для данного метода.
Примеры кода
.NET
HttpStatusCode.NotImplemented
Rust
http::StatusCode::NOT_IMPLEMENTED
Rails
:not_implemented
Go
http.StatusNotImplemented
Symfony
Response::HTTP_NOT_IMPLEMENTED
Python3.5+
http.HTTPStatus.NOT_IMPLEMENTED
Java
java.net.HttpURLConnection.HTTP_NOT_IMPLEMENTED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NOT_IMPLEMENTED
Angular
@angular/common/http/HttpStatusCode.NotImplemented