ウェブサイト誕生当初、画像や動画、GIFなどが使用されることはほとんどありませんでした。ところが現在では、情報を発信するテキストコンテンツだけでなく、視覚的に魅力のあるサイトづくりが当たり前になっています。そんな変化に伴い、メディアの不一致によって、ブラウザとサーバー間の通信に問題が生じて発生するエラーコードがあります。それが、HTTP 415エラーです。

ウェブサイトでメディアを使用することは、現代において必須条件と言っても過言ではありません。すなわち、メディアに何かしらの問題が発生すれば、すぐさま解決が必要になります。しかし、他のエラーとは異なり、特にWordPressサイトでは、このエラーは少々厄介です。プログラミングの知識が必要になる可能性がありますが、これについては後ほどご説明します。

HTTP 415エラーについて動画での解説もご用意しています。

この記事では、HTTP 415エラーの概要とその原因、そして解決方法を見ていきます。

HTTP 415エラーとは

HTTP 415エラーは、数ある400番台ステータスコードの1つです。404などのエラーと仲間であることを考慮すれば、このエラーの大枠が見えてきます。

400番台のエラーは、すべてクライアント、またはサーバーのどちらかに必要な何かが欠けていることを意味します。このエラーの正式名称は、「415 Unsupported Media Type(サポートされていないメディアタイプ)」。この名称から分かる通り、HTTP 415エラーは、サーバー側が認識できない、または受け入れることができないメディアのファイルタイプを受信しているということです。

通常、このエラーは、API(アプリケーションプログラミングインターフェース)を使用する際に起こり、サーバー側のエラーになります。次に、その原因を見ていきましょう。

HTTP 415エラーが発生する原因

HTTP 415エラー(または「415 Unsupported Media Type」エラー)は、サーバーがブラウザからのリクエストを受け入れられないことを意味しています。通常、これはブラウザが送信するデータ(ペイロード)の形式が適切でないことに起因します。

間違ったデータがサーバーに送信され、サーバーにエラーが生じるという点では、「422 Unprocessable Entity」エラーと似ています。また、ブラウザが送信するデータとサーバーが受信するデータは、一見同じであっても別物であることは押さえておきましょう。

普通であれば、ユーザーが、PNGしか受け付けないインターフェースに認識できないファイルタイプをアップロードしようとすると、アップロードできないようになっています。ところが、サーバー側で処理できるメディアの種類を正確に指定していなければ、バックエンドでこのようなエラーが発生することがあります。フロントエンドにはおそらく何も表示されませんが、バックエンドでは、以下のような管理画面の通知が表示されます。

WordPressのエラー表示「このファイル形式は許可されません」
WordPressのエラー表示「このファイル形式は許可されません」

幸い、WordPressのインフラは柔軟です。例えば、メディアライブラリには、さまざまな種類のファイルをアップロードすることができます。

とは言え、このエラーは開発者レベルの問題です。次に、その解決方法を見ていきましょう。

HTTP 415エラーの解決方法

改めて要約すると、HTTP 415エラーとは、そのペイロード形式がサーバーでサポートされていないことが原因で、サーバーがファイルタイプの受け入れを拒否していることを意味します。つまり、原因はPHPコードにあり、PHPコードの修正が必要です。

テーマファイルを編集することになるため、サイトやテーマの開発者でない場合、またはコードを記述した経験をお持ちでない場合には、可能であれば開発者に協力を求めるのが賢明です。誤った修正を加えてしまうと、さらに問題が発生する可能性があります。

HTTP 415エラーに関するMozillaのドキュメントに、エラーを解決する手がかりが2つ記述されています。「Content-Type」と「Content-Encoding」です。

Content-TypeとContent-Encodingヘッダーの仕組み

Content-Typeヘッダーは、エンコードが行われる前のリソースをクライアントリクエストに渡します。リソースの元のメディアタイプが以下のように示されます。


Content-Type: text/html; charset=UTF-8

Content-Type: image/jpeg;

Content-Encodingは、ペイロード(アップロードしたいメディア)が持つすべてのエンコーディングの一覧です。また、元のペイロードを取得するためにファイルをどのようにデコードすべきかの指標になります。


Content-Encoding: gzip

Content-Encoding: br

お分かりかと思いますが、ファイル圧縮は、データをエンコードする一般的な方法です。理論上問題はありませんが、テーマやプラグインの関連ファイルにこのコードを記述しなければ、問題が発生する可能性があります。

HTTP 415エラーコードの見つけ方

以上のことを踏まえ、HTTP 415エラーが発生した場合には、以下のことを行うことができます。すべてPHPコードに関連しています。

  • Content-Typeヘッダーが正しい値を送信しているかを確認
  • Content-Typeヘッダーで指定したものをサーバーが処理できるかを確認
  • サーバーがAcceptヘッダーで処理できる内容を確認

REST APIのリクエストの一部として行うこともできますが、必ずしもコアファイル内で行う必要はありません。例えば、Stack Overflowのあるユーザーが、PHPコード内でcURLコマンドを使いAPIを叩いた際にこの問題が発生したと報告しています。

確認が必要な場所は2箇所です。まず、Content-Typeヘッダーで正しいファイル形式を指定します。先ほど触れたStack Overflowユーザーの例で見ていきます。


$headers = array (

    ‘Content-Type’ => ‘application/json’,

   …

wp_remote_post()関数で無効なヘッダーキーを定義するコードの中にタイプミスがあります。


$arg = array (

    'header' => $headers,

    …

このように、「header」に「s」が抜けているようなタイプミスが原因で、HTTP 415エラーが起こっていることが考えられます。しかし、クライアントが正しいファイルタイプを受け入れることができるかどうかも確認しておきたいところ。これには、Acceptヘッダーを使用します。例として、このヘッダーは以下のようになっています。


Accept: text/html

Accept: image/*

クライアント側とサーバー側の両方が正しいファイルタイプを受け入れ、送信可能であることを確認できれば、HTTP 415エラーを恒久的に防ぐことができます。

まとめ

ウェブサイトで発生するエラーの多くは、簡単に解決することができます。Kinstaブログでも、さまざまなエラーの解決方法をご紹介していますが、大体はすぐにサイトを正常な状態に戻せるものです。ただし、このHTTP 415エラーの場合は、専門知識が必要になる点で他のエラーとは少し異なります。

解決策は、Content-Typeヘッダーの値を操作して、正しい値がサーバーに送信されるように修正すること。意外にも、コードの単純なタイプミスがエラーの原因になっている可能性もあります。なんだか恥ずかしい原因のように思えますが、サーバーに送信するコンテンツタイプばかりに目を向けていると、案外起こりがちです。

HTTP 415エラーは自分で修正可能ですが、サイトに関するその他の問題でお困りなら、私たちにいつでもご相談ください。Kinstaのカスタマーサポートは24時間年中無休で待機しており、例えばサイトの読み込みに失敗することがあっても、すぐに解決のお手伝いをさせていただきます。