HTTPステータスコード406 Not Acceptableとは?

INEZA Felin-Michel

INEZA Felin-Michel

30 9月 2025

HTTPステータスコード406 Not Acceptableとは?

HTTPステータスコードの豊富な語彙の中には、他のコードよりも目立つものもあれば、クライアントとサーバー間のスムーズな通信を確保するために重要な役割を静かに果たしているものもあります。406 Not Acceptableステータスコードは、そのようなあまり知られていないヒーローの1つです。人気のある404や500ほど頻繁に表示されることはないかもしれませんが、その目的を理解することで、コンテンツネゴシエーションの理解を劇的に深め、WebアプリケーションやAPIの柔軟性を高めることができます。

406 Not Acceptableステータスコードは、サーバーからの不可解なメッセージのように感じられるかもしれません。しかし、その意味を理解すれば、よりクリーンで予測可能、そしてユーザーフレンドリーなAPIを設計するのに役立つ強力なシグナルとなります。

このステータスコードは、クライアントとサーバーがデータ交換に最適な形式を合意する、洗練されたコンテンツネゴシエーションプロセスの通信障害を表します。

このブログ記事では、HTTP 406 Not Acceptableが何を意味するのか、なぜ発生するのか、コンテンツネゴシエーションがどのように影響するのか、そして開発者またはAPIコンシューマーとして効果的に対処する方法について詳しく掘り下げます。406 Not Acceptableのような奇妙なエラーのデバッグは、適切なツールがなければ時間がかかる場合があります。そのため、私はApidogをお勧めします。これは無料のオールインワンAPIプラットフォームで、APIを設計モックテストデバッグドキュメント化することを容易にし、406エラーが発生する理由と迅速な修正方法を正確に把握できます。

💡
406ステータスを含む応答をシームレスにAPIを探索およびテストしたい場合は、Apidogを無料でダウンロードしてください。Apidogは、406のようなHTTPステータスコードの調査を簡単かつ効果的にする、不可欠なAPIテストおよびドキュメントツールです。
button

さて、コンテンツネゴシエーションとHTTP 406 Not Acceptableステータスコードの世界を探求しましょう。

問題:誰もが自分のやり方でデータを欲しがる

Webの初期には、サーバーは通常、リソースに1つの形式(通常はHTML)を提供していました。しかし、Webが進化するにつれて、さまざまなニーズを持つ異なるクライアントが出現しました。

406ステータスコードが存在するのは、クライアントがサーバーが特定のリソースに対して提供できない形式を要求する場合があるためです。

HTTP 406 Not Acceptableは実際に何を意味するのか?

406 Not Acceptableステータスコードは、サーバーがリクエストのプロアクティブなコンテンツネゴシエーションヘッダーで定義された許容値のリストに一致する応答を生成できず、かつサーバーがデフォルトの表現を提供することを望まないことを示します。

より簡単に言えば、「あなたが受け入れる形式を正確に教えてくれましたが、私はそのどの形式でもリソースを提供できません。」ということです。

適切な406応答には、サーバーが要求されたリソースに対して提供できる形式に関する情報が含まれている必要があります。これは通常、ヘッダーまたは応答ボディで行われます。

406応答は次のようになります。

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 Not Acceptable</title></head><body><h1>Not Acceptable</h1><p>This resource is available in the following formats:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

APIの場合、構造化された応答を返す方がより役立ちます。

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "The requested resource is not available in the requested format.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

リクエストが有効かどうかではありません。応答タイプが許容されるかどうかです。

コンテンツネゴシエーションの魔法:Acceptヘッダーの仕組み

406を理解するためには、クライアントがサーバーにどの形式を好み、どの形式を処理できるかをどのように伝えるかを理解する必要があります。これはAcceptヘッダーを通じて行われます。

実際のAcceptヘッダー

クライアントがリクエストを行う際、処理できるコンテンツタイプと優先するコンテンツタイプを指定できます。

簡単な例:

GET /api/users/123 HTTP/1.1Accept: application/json

これは、「ユーザーデータが欲しいのですが、JSONしか理解できません」という意味です。

より洗練された例:

GET /api/users/123 HTTP/1.1Accept: application/json, text/html;q=0.9, application/xml;q=0.8

これは、「JSONを優先しますが、HTML(90%の優先度)とXML(80%の優先度)も処理できます」という意味です。

qパラメータ(品質値)は0から1の範囲で、1が最も優先されます。

ネゴシエーションが失敗した場合

406エラーは、サーバーがAcceptヘッダーを見て、次のことを認識したときに発生します。

  1. クライアントが要求するリソースを持っている
  2. クライアントが指定したどの形式でも提供できない
  3. デフォルトの形式を送信することを望まない(XMLのみを受け入れるクライアントにJSONを送信するなど)

406 Not Acceptableはコンテンツネゴシエーションにどのように適合するのか?

クライアントが許容可能なメディアタイプ(例:JSON応答のみを要求)を指定するAcceptヘッダーを含むHTTPリクエストを送信すると、サーバーはそれに応じてコンテンツを配信しようとします。

サーバーがその基準に合う許容可能なコンテンツを提供できない場合、次のように応答します。

textHTTP/1.1 406 Not Acceptable Content-Type: text/html

この時点で、サーバーは利用可能なコンテンツ表現のいずれもクライアントの好みに一致しないため、リクエストを拒否したことを意味します。

サーバーが200 OKではなく406を返す理由

あなたはこう思うかもしれません。「優先される形式でなくても、何かを返せばいいのではないか?」

サーバーが406を返す理由は次のとおりです。

406応答の一般的な原因

406 Not Acceptableが表示される典型的な理由をいくつか示します。

406エラーを引き起こす現実世界のシナリオ

1. APIバージョニングの競合

v2ではJSONのみを提供するAPIを想像してみてください。しかし、クライアントはv1の頃からXMLを期待しています。

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "This API version only supports JSON",
  "available_formats": ["application/json"]
}

2. 過度に制限的なクライアント設定

モバイルアプリはJSONのみを受け入れるようにハードコードされている場合がありますが、特定のリソースをXMLとしてのみ提供するサーバーに遭遇します。

GET /reports/quarterly-sales HTTP/1.1Accept: application/jsonHTTP/1.1 406 Not Acceptable

(レポートはCSVまたはPDFとしてのみ利用可能かもしれません)

3. デフォルトのフォールバックの欠如

一部のサーバーは、コンテンツネゴシエーションに関して厳格に設定されており、ネゴシエーションが失敗した場合にどの形式を返すかを推測することを拒否します。

サーバーは通常、406をどのように処理するのか?

興味深いことに、一部のサーバーは厳格なコンテンツネゴシエーションを無視し、406で応答するのではなく、デフォルトの応答にフォールバックします。

しかし、厳格なRESTful APIや、正確な通信を重視するサービスは、クライアントの要件を満たせない場合に406を返すことがあります。

406 Not Acceptableと関連するステータスコード

406の役割を明確にするために、関連するHTTPステータスを見てみましょう。

ステータスコード 意味 使用する状況
400 Bad Request 不正な構文または無効なリクエスト リクエストが理解できない場合
406 Not Acceptable 有効なリクエストだが、サーバーがAcceptヘッダーを満たせない コンテンツネゴシエーションの失敗
415 Unsupported Media Type サーバーがクライアントから送信されたコンテンツタイプを処理できない 無効なリクエストボディのメディアタイプ
406 vs 415 違い 406は応答タイプに関連し、415はリクエストボディタイプに関連する

クライアントは406応答をどのように処理すべきか?

406を受け取ったクライアントは、次のことを行うべきです。

開発者は406を回避または処理するために何ができるか?

カスタム406エラーページとメッセージ

WebサイトやAPIの場合、意味のある役立つ406エラー応答を提供することで、開発者とユーザーのエクスペリエンスが向上します。

Apidogでコンテンツネゴシエーションをテストする

Apidog Promotion Material-41

APIがさまざまなAcceptヘッダーをどのように処理するかをテストすることは、堅牢なアプリケーションを構築するために不可欠です。Apidogは、このプロセスを簡単かつ効率的にします。

Apidogを使用すると、次のことができます。

  1. ヘッダーを簡単に変更:Acceptヘッダーをすばやく追加および変更して、サーバーが異なるコンテンツタイプのリクエストにどのように応答するかをテストします。
  2. 複数の形式をテスト:同じエンドポイントに対して、異なるAcceptヘッダー(JSON、XML、HTML)を持つテストのコレクションを作成し、包括的なカバレッジを確保します。
  3. 406応答を検証:意図的に制限的なAcceptヘッダーを送信して、サーバーが役立つエラー情報とともに適切な406応答を返すことを確認します。
  4. コンテンツネゴシエーションテストを自動化:さまざまなコンテンツタイプのリクエストをAPIが正しく処理し、適切なステータスコードを返すことを自動的に検証するテストスイートを作成します。
  5. 複雑なシナリオをデバッグ:Apidogの詳細なロギングを使用して、406エラーが発生した正確な理由と、サーバーが実際にサポートしている形式を理解します。
button

この体系的なアプローチにより、APIは異なる形式要件を持つクライアントを適切に処理できます。つまり、闇雲に手探りするのではなく、何が許容されるかを正確に知ることができます。Apidogを無料でダウンロードして、コンテンツネゴシエーションと406シナリオのトラブルシューティングにおける生産性を向上させましょう。

406エラーを処理するためのベストプラクティス

サーバー開発者向け:

  1. 役立つエラー情報を提供する:406を返す際には、常にサポートしている形式に関する情報を含めます。これにより、クライアント開発者はリクエストを修正できます。
  2. Varyヘッダーを使用する:応答にVary: Acceptヘッダーを含め、応答コンテンツがAcceptヘッダーの値に基づいて変化することを示します。これは、キャッシュシステムが正しく機能するのに役立ちます。
  3. デフォルトの動作を検討する:HTTP仕様ではサーバーがデフォルトの表現を返すことを許可していますが、多くの最新のAPIは厳格であり、クライアントに要件を明示させるために406を返すことを選択しています。
  4. サポートされている形式を文書化する:APIが各エンドポイントでサポートするコンテンツタイプを明確に文書化します。

クライアント開発者向け:

  1. Acceptヘッダーで柔軟に対応する:特定の理由がない限り、適切な品質値を持つ複数の形式をAcceptヘッダーに含めます。
  2. 406を適切に処理する:406を受け取った場合、応答で利用可能な形式を確認し、リクエストを調整するか、ユーザーに役立つエラーメッセージを表示します。
  3. フォールバックロジックを持つ:主要な優先形式が利用できない場合に、異なる形式を処理できるフォールバックロジックを持つことを検討します。

コンテンツネゴシエーションの縁の下の力持ち

Varyヘッダーは、コンテンツネゴシエーションが関与する場合の適切なキャッシュ動作にとって重要です。サーバーが応答にVary: Acceptを含めると、応答コンテンツがAcceptヘッダーの値に依存することをキャッシュに伝えます。

これにより、キャッシュがXMLを要求したクライアントにJSON応答を誤って提供したり、その逆を行ったりするのを防ぎます。

406応答のSEOへの影響

一般的に、406はSEOに大きな影響を与えません。なぜなら、検索エンジンは通常、コンテンツネゴシエーションを堅牢に処理し、有効な応答を好むためです。しかし、誤って設定されたAPIや、頻繁に406を返すWebサイトは、クローラーやユーザーを苛立たせる可能性があります。

最新のAPI設計と406

最新のRESTful API設計では、406の使用は進化してきました。

しかし、406は次の場合に依然として関連性があります。

406エラーのトラブルシューティング

406に関するセキュリティ上の考慮事項

結論:正確な通信のためにHTTP 406 Not Acceptableを受け入れる

HTTP 406 Not Acceptableステータスコードは、Webアーキテクチャの重要な原則、つまりクライアントとサーバー間の能力と要件に関する明確な通信を表しています。これは恐れるべきエラーではなく、データ交換が相互に理解できる形式で行われることを保証するためのメカニズムです。

406に毎日遭遇することはないかもしれませんが、それを理解することで、より良いWeb市民になることができます。これは、データ形式の要件を明確にし、形式ネゴシエーションを適切に処理することの重要性を教えてくれます。

API開発者にとって、コンテンツネゴシエーションと406応答を適切に実装することは、より堅牢で柔軟なAPIにつながります。クライアント開発者にとって、406エラーの対処方法を理解することは、アプリケーションがさまざまなサーバー機能に適応できることを保証します。

さまざまなシステムやプラットフォーム間でデータが流れる必要がある世界では、コンテンツ形式をネゴシエートする能力がこれまで以上に重要です。そして、これらのネゴシエーションをテストして完璧にする必要がある場合、Apidogのようなツールは、形式の好みに関係なく、アプリケーションが効果的に通信することを保証する完璧な環境を提供します。

button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる