サーバーまたはクライアントサイドでエラーが発生することは、珍しくありません。このようなエラーは一般的にHTTP レスポンスまたはステータスコードと呼ばれます。今回取り上げる406エラーや「404 not found」エラーもHTTPレスポンスの一種です。
サイトにアクセスした際に406エラーに遭遇することがありますが、自分のサイトで発生することも。ブラウジングを行う一般ユーザーにとっては、ただの鬱陶しいエラーであっても、サイトやアプリケーション所有者にとっては気が気でない状況です。406エラーなどのHTTPレスポンスコードがサイトで表示されると、信頼性に欠けるだけでなく、貴重な訪問者と収益の損失につながりかねません。
今回は「406 Not Acceptable」エラーの概要とその原因、そして解決策と発生防止策をご紹介します。
HTTP 406エラーの解決方法について動画での解説もご用意しています。
HTTP 406エラーとは
「406 Not Acceptable」というHTTPエラーメッセージは、404エラー(通常存在しないウェブページを示す)や301エラー、500エラーほどは一般的ではなく、それほど目にする機会は多くないでしょう。
頻繁には発生しないとは言え、406エラーが問題を引き起こすことがあるのは事実。発生すると、以下のような画面が表示されます。
Not Acceptable
An appropriate representation of the requested resource could not be found on this server.(サーバーは要求されたページをクライアントが受け入れ可能な形式で送信することが出来ません)
その後に、エラーが発生した「要求されたページ」が挙げられ、エラーの詳細またはサーバー情報が表示されることも。
406エラーの画面やメッセージはサイトやレンタルサーバー、サイトの閲覧に使用したブラウザなどによって異なります。エラーの原因が示されることもあれば、単に「406 Not Acceptable」とだけ表示され、問題の解決に役立つ情報が一切示されないこともあります。
実際のメッセージを分かりやすいように意訳すると次のような意味になります。
こんにちは、僕はブラウザです。ウェブサイトを表示しようとしたのですが、次のいずれかの問題が発生しました。
- サイトのサーバーが誤ったファイル形式を送信したため、受け入れることができません。
- サイトのサーバーが何らかの設定やセキュリティの要件に反しています。
そのため、違反に対処するか、受け入れ可能なファイル形式で送信してください。ちなみに僕が読み取ることのできるファイル形式は次の通りです。
ブラウザが親切であれば…このようなことを言ってくれるでしょう!
基本的に、サーバーとブラウザ、もしくはウェブアプリケーションを表示するパソコンの間で伝達の問題が発生している状態です。ブラウザで送信された情報を読み取ることができないか、何らかの要件を満たしていないために、データを確認できないのです。
そこで、伝達の問題の原因を特定するためにいくつか確認しなければならないことがあります。
HTTP 406エラーの原因
ウェブページを開く時、ブラウザ(Safari、Firefox、Brave、Chrome、Internet Explorerなど)はサイトのコンテンツとデータベースのファイルを取得するために、毎回ページのサーバーにリクエストを送信します。ブラウザは閲覧者とサーバーの間で「メッセンジャー」の役割を果たします。サーバーにユーザーが閲覧したい内容を伝え、うまくいくと正しい情報が返ってきます。
最初のリクエストの際、ブラウザはサーバーに受け入れ可能なファイル形式を伝えます。これはAccept-リクエストヘッダーと呼ばれ、ウェブサイトやウェブアプリケーションを生成するための適切な形式でファイルを配信するようサーバーに指示します。
時に、サーバー側は適切な形式でない、もしくはブラウザやクライアント側のパソコンの定めるルールに反した情報を送信することがあります。この時、サーバーが適切なデータを送信していないことを示す406エラーが表示されます。
リクエストヘッダーにおける「不適切な形式」および「ルール違反」の例をいくつかご紹介します。
- Accept-ranges:サーバーによっては、特定のセキュリティ強化策を設けていたり、特定のファイルサイズの範囲のレスポンスしか許可していなかったりすることがあります。許容されている範囲を超えるバイト数を送信しようとすると、406エラーが表示されます。
- Accept-encoding:サーバーからブラウザへと素早く転送するためのファイル圧縮に関するヘッダーです。受け入れ不可な圧縮方法やファイル形式だと、406エラーコードが表示されます。
- Accept-charset:文字セットやサイトのファイルテーブルがコード(CSSやHTMLなど)を読み取り可能な文字列に変換する方法を指示します。この世には非常に多くの文字、言語、記号が存在するため、それらをすべて網羅することは困難です。標準はISO-8859ですが、他にもそれを補完するテーブルがあります。新たな言語や文字の登場に伴い、新たな文字列テーブルが時折リリースされます。
- Accept-language:通常、Accept-charsetの別称で、世界の言語に関するものです。
- MIMEタイプの相違:ブラウザは時折サーバーへ特定のMIMEタイプを指示することがあります。MIMEタイプとは、JPEG画像や特定の動画形式、またはプレーンテキストなどのコンテンツの要素のことです。サーバーが要求されたMIMEタイプを送信しなかった場合、406エラーが表示されます。
406エラーの主な対処方法は、ソースコードを確認し、Accept-、Request-、Response-ヘッダー内の問題を特定することです。
Accept-ヘッダーとResponse-ヘッダーを確認するには、ブラウザでウェブページを開き、右クリックして「検証」を選択するのが最も簡単です。
「ネットワーク」>「ヘッダー」から該当のウェブページのすべてのリクエストを確認できます。
通常、一覧の中から特定のリクエストを選択すると、そのRequest-ヘッダーとResponse-ヘッダーが確認できます。
もしくはウェブ開発者に依頼してソースコードを見てもらってもいいでしょう。一方で、データベースをデバッグし、クリーンアップするためのツールがあればソースコードの確認はより簡単になります。それについては後ほど詳しく解説します。
前述のとおり、「406 Not Acceptable」は、クライアントからサーバーへ送信されたリクエスト自体は有効であるものの、その中に独自の要件が含まれていることを示します。最初のリクエストに含まれるその特別な要件はAccept-ヘッダーで確認できます。
エラーの原因としては以下が考えられます。
- サーバーの返したデータが、JPEGやmp4の動画など、要求されているMIMEタイプや適切な形式でなかった。
- サーバーの返した情報が適切な言語でなかった(Accept-language)。例えば、ブラウザがフランス語と指示しているのにドイツ語だった場合などです。
- サーバーがAccept-encodingリクエストに対して不適切な圧縮方法や形式で応答している。
- サーバーがAccept-rangesリクエストで定められたバイト数を超えるデータを返した。
- サーバーがブラウザの読み取り可能な文字列を使用しておらず、Accept-charsetリクエストの問題が発生している。
他にも406エラーの原因はいくつか考えられますが、それらは非常に希です。上記で最も一般的なものからそうでないものまで網羅できています。最初の2つが最も可能性が高いので、主にMIMEタイプの相違とAccept-languageに関する問題のトラブルシュートを中心に行うことになるでしょう。
サイトファイル内の何かが問題を引き起こしている状況を考えると、サイトの所有者はこれらの形式に関する問題や違反を理解しておくべきでしょう。多くの場合、誤ったコードを記述している、必要なコードを削除してしまった、サーバーの設定ミスなど、人為的なミスが原因です。また、特定のセキュリティに関する設定や制限によって、サーバーからのコンテンツの転送を阻止している場合にも406エラーが発生することがあります。
HTTP 406エラーの解決方法
406エラーの対処に着手する前に、ウェブサイトやアプリケーションのバックアップをしておくのが賢明です。サイトのソースコードを編集することでさらに別の問題が発生する可能性があるので、必要に応じてバックアップを復元できるよう、データベースやサイトファイルをバックアップしておきましょう。
データベースからアプリケーション、メディアからサイトファイルまで、全てを完全にバックアップしましょう。Kinstaのお客様には、MyKinstaのバックアップ機能をご利用いただけます。サイト全体を別のファイルに保存し、「復元」ボタンで後からいつでも復元できます。
406エラーが起きる原因に関して理解が深まったところで、その対処方法と防止方法についてご説明します。
選択肢はいくつかあります。例えば、クライアント側の原因(ユーザーがエラーを起こす場合やパソコンが正常に動作しない場合)、サーバー側の原因、プラットフォームの原因(プラグインの不具合等)に対処するものです。
URLが正しいかどうか確認する
最初の方法は単純で、最も手っ取り早いものとなります。クライアント側(つまり、あなたのパソコンなど)に原因があるパターンです。
この場合、406エラーよりも404エラーが発生する可能性の方が高いのですが、URLが有効である場合「406 Not Acceptable」エラーが表示されてしまうことがあります。ブラウザは少し奇妙な方法でリクエストを解釈することがあります。例えば、URLの最後に「JSON」や「PHP」をつけると、クライアントはそれらを必要としていないにも関わらず、その特定の形式を要求していると判断されてしまうことがあります。
この問題を解決するには、エラーが発生する前に使用していたURLを再確認します。再度入力したり、サイトの別のサブドメインを利用してみたりして、読み込まれないページは一つだけかどうか確認しましょう。
406メッセージは技術的にはクライアント側のエラーコードとみなされるため(実際にはプラットフォームやサーバーの問題であることが多いのですが)、クライアント側で問題が発生しているかどうかを判断するには、まずこの方法を試してみましょう。
デバイスとネットワークをリセットする
また、別のクライアント側の問題として、Accept-ヘッダーがユーザーのパソコンからプラットフォームに送信され、プラットフォームが要件を満たせていない、という状況も考えられます。主に、ゲームサイトや、Huluのようなメディア配信サイト、Spotifyなどの音楽配信サイトなどで発生します。
Hulu等のウェブサイトで動画を視聴しようとして、406メッセージが表示されてしまうことがあります。このような時、問題はほとんどの場合、クライアント側にあります。通常、あなたのコンピュータ、ネットワーク、その他デバイスが原因です。
どのようなプラットフォームでも発生する可能性はありますが、406エラーが発生しやすいのは、次のようなサイトやシステムです。
- Hulu
- Google Play
- Square Enix Games
- Netflix
- Xbox
- Windows(通常、ゲーム)
他にもまだまだありますが、406エラーが発生する可能性が高いプラットフォームは、大まかに上の例からわかるはずです。
メディア配信、ゲーム系のプラットフォームには制限が多く、お住まいの地域やネットワークの構成によって様々です。このような多様な要因により、エラーが発生する可能性があります。
すべてのサイトでの個別の対処法を解説するわけにはいきませんが、次の方法で、エラーが解消するかどうか確認してみてください。
- オンラインでプラットフォームのサーバーの状況を確認する。単に企業側のサーバーに問題があるだけかもしれません。
- コンピュータ、ゲーム機、ストリーミング機器を再起動する。
- すべてのデバイスをケーブルから外し、数分経ってから再度接続し、エラーが解消するか確認する。
- アプリが最新のバージョンで動作しているかどうか確認する。また、使用中のパソコンに最新のファームウェアアップデートがあるかどうか確認する。
- 自宅やオフィスのネットワーク(ルーターを介したWiFiやインターネット接続)をリセットする。
- 問題が解決しない場合は、無線ネットワークから有線ネットワークに切り替えてみる。
- 必ずうまくいくわけではありませんが、全く別のパソコンでも同様の環境でエラーが発生するか確認してみる。その際、同じネットワークを使用するようにしましょう。同じエラーが発生しない場合は、ネットワークと最初に使用していたパソコンを調べてみてください。
上記すべて試してもうまくいかない場合、検索エンジンで、ご利用中のプラットフォーム名のあとに「+ 406エラーコード」と入力し、サイト毎の対処方法を検索してみましょう。フォーラムやサポートドキュメントがヒットするはずです。
直近のCMSへの変更を元に戻す
次は、ウェブサイトやアプリケーションに使用されているシステムを調べてみましょう。サイトファイル内の事象が複雑に絡み合って、WordPressなどのコンテンツ管理システムが直接の原因となっている可能性があります。
WordPressであっても他のコンテンツ管理システムであっても、まずは最終更新日を確認してください。WordPressは、この種のエラーを回避できるように、盤石なインフラストラクチャを標準で搭載しています。
しかし、特定のプラグイン、テーマ、または手動で編集したコードによって、サイトファイルがクライアントまたはサーバーのリクエストに反する状況になっていることがあります。CMSを最新版にアップデートすることで、すぐに問題が解決することもあります。
CMSが原因かどうかを判断するには、まず、コアファイルの直近のアップデートをすべて元に戻します。ご存知のとおり、WordPressでは定期的にシステムのアップデートがリリースされます。そのほとんどは自動的に行われますが、古いバージョンだと、ボタンをクリックして手動で行わなければいけない場合があります。
さらに、WordPressなどのCMSでは、プラグイン、テーマ、拡張機能などが使用されています。これらも定期的にアップデートされるので、同様に元に戻す必要があるかもしれません。
WordPress以外のシステムについては、「プラットフォーム名+ダウングレード方法」で検索してみましょう。
WordPressでは、簡単にダウングレードし、以前のバージョンに戻すことができます。
次の方法でWordPressサイトをダウングレードする方法を解説した記事をご用意しています。多くのものはほんの数分で完了します。
- WordPressサイトを手動でダウングレード
- プラグインを使用してWordPressのシステムをダウングレード
- 一つ前のバックアップを復元して以前のバージョンに戻す(もしくは少なくとも過去のコンテンツとファイルに戻す)
- プラグインやテーマを手動でダウングレード
- プラグインやテーマを個別のプラグインでダウングレード
- 過去のPHPバージョンに切り替える
プラグイン、テーマ、拡張機能を削除して、再インストールする
WordPressのプラグインやテーマを使用すると、WordPressコアファイルに作用するコードがサイトファイルに追加されます。信頼性の高いプラグインの場合、通常問題は起きませんが、時折、コンフリクトが発生することがあります。プラグイン、テーマ、またはサードパーティ製の拡張機能が、406エラーの原因となる可能性があります。
問題のあるプラグインやテーマを特定するには、プラグインとテーマを一つずつ無効化するのが効果的です。一つ無効にする度に406エラーが解消したかどうかを確認します。解消している場合、それが原因であったことが分かります。解消しない場合は、そのプラグインやテーマを再インストールして、別のプラグインやテーマをアンインストールしていきます。
データベースの変更やコンフリクトの状況を分析する
プラグインが正常に動作するためには、データベースに完全にアクセスする必要があるため、残念ながら、問題のプラグインを削除しても、WordPressデータベースへの影響が残る可能性があります。そのため、プラグインを削除したことで406エラーが解消されたように見えても、データベースの状態を確認する必要があります。そうしないと、将来的にさらなる問題が発生する可能性があります。
プラグインやテーマが原因でなかった場合でも、データベースがエラーの原因であるか判断するために中身を調べる必要があります。偶発的であれ意図的であれ、データベースの変更が406エラーの主な原因になっていることがあります。
データベースを調べて修正するには、次の方法をお試し下さい。
- データベースのスキャン/クリーンアップ用ツールをインストールして、問題のある余分なテーブルとアセットを削除する。おすすめのツールにはWP OptimizeやAdvanced Database Cleanerなどがあります。多くの場合、削除済みの投稿、リビジョン、メタデータなどの古い項目や孤立した項目を削除する作業になります。データベースをクリーンアップし、406エラーを解消するための重要なステップです。
- データベースを調べ、問題のあるプラグインによって変更された可能性のあるレコードやテーブル、その他、不適切なもの、不要なものを探す。
- 問題の原因に見当がついたら、フォーラムやオンラインディスカッションなどを検索し、解決方法を探してみましょう。同じ問題を経験している人が他にもいる可能性があります。
サーバーログを分析する
ここまで、クライアント側とCMSに重点を置いた対処方法をご紹介してきました。ここでは、サーバー側の問題について検討します。これ以降の対策は、CMSを使用していない場合、または406エラーがCMSやクライアントのパソコンと関係がないことが分かっている場合に効果的です。
サーバーのトラブルシューティングの最初のステップは、ログを確認することです。どのようなウェブアプリケーション、CMS、ウェブデザインシステムでも必ずサーバー側のログが記録されます。
アプリケーションのログには、データベースへの問い合わせと送信された結果、要求されたページなど、アプリケーション全体の(または直近の)履歴が保存されます。一方、サーバーログには、アプリケーションを実行するのに使用されるサーバーまたはハードウェアの健全性と状態に関する情報が含まれています。
Kinstaのお客様の場合、MyKinstaからエラーとサーバーのログを確認できます。406エラーの原因である可能性のある全てのログを確認しましょう。
- logファイル
- kinsta-cache-perf.logファイル
- logファイル
また、FTPクライアントを使用してアクセスログ、WordPressエラーログのファイルを確認することもできます。他にも、wp-config.phpでエラーログを有効にする方法や、MyKinstaのデバッグモードで確認する方法もあります。
エラーログが見つからない場合や、エラーログの意味が分からない場合は、お気軽にKinstaのカスタマーサポートまでお問い合わせください。
ウェブアプリケーション(WordPressなど)をデバッグする
多くのウェブアプリケーションでサーバーログやエラーログが保存されるのと同様に、通常、デバッグに関する情報も確認できます。デバッグとは、アプリケーションのコードを調べ、細かなエラーやバグを発見、取り除くことです。
WordPressやウェブアプリケーション全体を調べるのに一番効果的なのは、データベースとウェブサイトのファイルをデバッグすることです。幸い、専用のプログラムがあるので、コードのすべてに目を通し、自分でバグを特定する必要はありません。前述のとおり、Kinstaでは、MyKinstaにデバッグ機能をご用意しています。
WordPressのデバッグの基本を押さえたら、Kinstaのデバッグモード、WordPressのデバッグプラグイン、または手動で実際にデバッグしてみましょう。
HTTP 406エラーを未然に防ぐには
406エラーの厄介な点は、さまざまな発生する状況が起こりうるということ。HuluやNetflixで映画やドラマを見ていても、「406 Not Acceptable HTTP」エラーに遭遇することがあります。
面倒ではありますが、ちょっとしたトラブルシューティングで解決できないこともありません。問題なのは、自分のサイトやアプリケーションで発生したとき。この場合は、サーバーやCMSのサイトファイルを確認する必要があります。
自分のサイトで発生した場合、今後のために対策を打っておきたいところです。プラグインやテーマの問題やヒューマンエラーを完全に防ぐことは難しいですが、データベースやサイトファイルを常にクリーンに保っておくためのコツはいくつかあります。
- 必要かつ評判の良いプラグイン、テーマ、拡張機能のみを使用して、かつ必要最低限の数に抑える。
- どうしても必要である、そして問題なく扱える場合を除いて、WordPressコアファイルを編集しない。
- データベースのクリーンアップとサイト最適化を定期的に実行する(1ヶ月ごとが理想的。バックグラウンドで自動的に実行されるクリーンアッププラグインを使用するのがおすすめ)。
- サーバーとウェブアプリケーションをデバッグする習慣をつける。Kinstaのお客様であれば、MyKinstaのデバッグ機能をご利用ください。その他のアプリケーションにも通常は同様の機能があるはず。
- サイトやアプリケーションの自動バックアップを設定する。コードのコンフリクトやエラーが発生しても、サイトの過去のバージョンを復元すれば、作業量が軽減される。
- WordPressやプラグインを更新する前には、自動バックアップを設定していても、念には念を入れて手動でもバックアップをとっておく。ファイルを編集する際や、サイトに新たなコードを追加する場合も同様。
まとめ
406エラーへの対処方法はいくつか存在します。どのようなエラーが発生しているのか、どこに対処すればいいのかを理解していれば、エラーを解消できるはずです。頻繁に遭遇するWordPressのエラーではありませんが、設定が正しくないと時折発生します。
他にもHTTP 406エラーの解決方法をご存知でしたら、以下のコメント欄でぜひ共有してください。
コメントを残す