501 Not Implemented
使い方
501 Not Implemented ステータスコードは、サーバー側の機能不足によりサーバーがリクエストを実行できないことを意味します。これは 405 Method Not Allowed ステータスコードに似ていますが、405 は要求されたメソッドが認識されているもののターゲットリソースでは許可されていないことを具体的に意味します。
405 Method Not Allowed ステータスコードは、サーバーがそのメソッドを認識しているがターゲットリソースでは許可していないことを意味します。501 Not Implemented ステータスコードは、サーバーがそのメソッドを認識していないか、どのリソースに対してもそのメソッドをサポートする能力を欠いていることを意味します。これはサーバーレベルでの恒久的な状態です。
このステータスは、サーバーがリクエストメソッドを認識しておらず、そのためどのリソースについてもそのリクエストをサポートできない場合に適切です。
SEO への影響
Google のような検索エンジンは、501 Not Implemented ステータスを返す URL をインデックスしません。このステータスコードを返す、以前にインデックスされていた URL は検索結果から削除されます。
一部の API は、501 の意味をメソッドの欠如を超えて拡張しています。Shopify の API は、要求されたエンドポイントがそのショップの現在のプランで利用できない場合(Shopify Plus に限定された機能など)に 501 Not Implemented を返します。そのエンドポイントは 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 メソッドが正しいことを確認します。GET と POST のみを想定しているサーバーへ PATCH を送信すると、サーバーにそのメソッドのハンドラーがまったくない場合に 501 が発生します。
一般的な根本原因とその対処:
サーバーでサポートされていないメソッド。Apache では Limit と LimitExcept のディレクティブが許可されるメソッドを制御します。nginx では、メソッドのフィルタリングは location ブロックで行われます。クライアントが送るメソッドが設定によって除外されていないことを確認します。
サーバーモジュールの欠落。Apache は PROPFIND や MKCOL といった WebDAV のメソッドに mod_dav を必要とします。IIS は WebDAV Publishing と正しいハンドラーマッピングを必要とします。モジュールを有効にしてサービスを再起動します。
リバースプロキシによるメソッドの除去や書き換え。一部のプロキシは非標準のメソッドを GET に変換します。nginx では、意図的でない限り proxy_method が設定されていないことを検証します。AWS ALB では、ターゲットグループが必要な HTTP メソッドをサポートしていることを確認します。
古いサーバーソフトウェア。古い Web サーバーのビルドは、そのリリース後に標準化されたメソッドのサポートを欠きます。Apache、nginx、IIS を現行の安定版に更新します。
ファイアウォールや WAF によるブロック。Web アプリケーションファイアウォールやセキュリティプラグインが、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