HTTPQUERY
日本語

415 Unsupported Media Type

使い方

415 Unsupported Media Type のエラーメッセージを受け取る場合、その原因は多くの場合、Content-Type または Content-Encoding のヘッダーがサーバーに拒否されたことです。あるいは、サーバーがメッセージボディをさらに検査した結果としてこのエラーを返すこともあります。

後者の場合、サーバーはコンテンツの解析または認識に失敗したためにこのエラーを示します。サーバーがメディアタイプは認識するもののその形式をサポートしていない場合、415 Unsupported Media Type が最も正確なレスポンスです。コンテンツに構造上の誤りがある場合は、400 や 422 のほうが適切です。

このエラーは 406 に似ていますが、415 Unsupported Media Type は Accept ヘッダーではなく Content-Type と Content-Encoding のヘッダーに基づく点が異なります。

SEO への影響

Google のような検索エンジンは、415 のレスポンスステータスを持つ URL をインデックスしません。以前にインデックスされていた URL は検索結果から削除されます。

例

クライアントはプレーンテキストでメッセージを送信したいと考えていますが、HTML のメッセージしか受け付けられないため、サーバーは 415 Unsupported Media Type を送信します。クライアントはその後 Content-Type ヘッダーを変更しますが、元のメッセージはそのままにします。サーバーはボディが有効な HTML でないと認識し、2度目もリクエストを拒否します。

最初のリクエスト

POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/plain
Content-Length: 24

Good morning, Everybody!

Content-Type ヘッダーに基づく最初のレスポンス

HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 138

<html>
  <head>
    <title>Unsupported Format</title>
  </head>
  <body>
   <p>Please use HTML to post new messages.</p>
  </body>
</html>

検証を回避しようとする後続のリクエスト

POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/html
Content-Length: 24

Good morning, Everybody!

メッセージボディの検査に基づく後続のレスポンス

HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 151

<html>
  <head>
    <title>Unsupported Format</title>
  </head>
  <body>
   <p>No HTML tags found. Use HTML to post messages.
   </p>
  </body>
</html>

対処方法

Content-Type ヘッダーが、サーバーの受け付ける形式と一致していることを検証します。API のドキュメントには通常、サポートされるメディアタイプが列挙されています。一般的な値には application/json、application/xml、multipart/form-data、application/x-www-form-urlencoded があります。

ボディの内容は、宣言した Content-Type と一致していなければなりません。Content-Type: application/json でプレーンテキストを送信すると、サーバーがボディを JSON として解析しようとするため失敗します。一部のサーバーは charset の表記に厳格で、charset=UTF-8 ではなく charset=UTF8 と書くと特定のプラットフォームで拒否されます。

圧縮データを送信する際は Content-Encoding ヘッダーを確認します。宣言したエンコーディング(例:gzip)と実際のボディの圧縮形式が一致しないと 415 が発生します。

ファイルアップロードでは、そのファイル種別がサーバーの許可リストに含まれていることを確認します。サーバーはアップロードを JPEG、PNG、PDF といった特定の形式に制限していることがよくあります。

REST API クライアントでのよくある誤り:

Postman や curl のようなツールでリクエストをテストすると、問題がアプリケーションのコードにあるのかリクエスト自体にあるのかを切り分けられます。Postman はボディの種類を選択すると Content-Type ヘッダーを自動的に設定します。

コードリファレンス

.NET

HttpStatusCode.UnsupportedMediaType

Rust

http::StatusCode::UNSUPPORTED_MEDIA_TYPE

Rails

:unsupported_media_type

Go

http.StatusUnsupportedMediaType

Symfony

Response::HTTP_UNSUPPORTED_MEDIA_TYPE

Python3.5+

http.HTTPStatus.UNSUPPORTED_MEDIA_TYPE

Java

java.net.HttpURLConnection.HTTP_UNSUPPORTED_TYPE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE

Angular

@angular/common/http/HttpStatusCode.UnsupportedMediaType