Content-Typeは、HTTP通信において送信されるデータの種類を指定するための情報として、様々な場合それを利用する必要があります。そこで、本文では、Content-Typeの基本情報を皆さんに紹介した上、Content-Typeの種類及びリクエスト送信時の指定方法をも詳しく皆さんに解説します。
Content-Typeとは
Content-TypeはHTTPヘッダの1つとして、クライアントとサーバーの間で送受信されるデータの形式を指定するのに使用されます。
主な用途は以下の通りです:
- クライアントがリクエストのBodyに何の形式のデータを含めているかサーバー側に送信
- サーバーがレスポンスのBodyに何の形式のデータを含めているかクライアント側に送信
- データの形式を指定することで、それを適切にパース・処理できるようになる
Content-Typeを指定することで, クライアント・サーバー間で適切にデータを扱えるようになります。例えば以下のように指定します:
Content-Type: text/html; charset=utf-8
これはHTML形式のtextデータで、文字エンコーディングはutf-8であることを示しています。
よく利用するContent-Type一覧
Content-Typeの値には大きく分けて2つの部分があります。
- メディアタイプ (text, image, audio, videoなど)
- 文字エンコーディング (utf-8, iso-2022-jpなど)
Content-Typeの主な種類と用途の一覧表は以下のようになります。
種類 | 説明 |
---|---|
text/plain | プレーンテキストデータ |
text/html | HTMLデータ |
text/css | CSSデータ |
text/javascript | JavaScriptデータ |
application/json | JSON形式のデータ |
application/octet-stream | 任意のバイナリデータ(EXEなどの実行ファイル) |
application/x-msgpack | Messagepackデータ |
application/xml | XML形式のデータ |
application/x-www-form-urlencoded | HTMLフォームからのデータ |
multipart/form-data | ファイルを含むフォームデータ |
image/gif | GIF画像データ |
image/png | PNG画像データ |
image/bmp | 汎用BMP画像データ |
image/x-ms-bmp | MS BMP画像データ |
image/jpeg | JPEG画像データ |
image/svg+xml | SVGファイル |
audio/wav | WAV音声データ |
audio/mp3 | MP3音声データ |
video/mpeg | MPEG動画データ |
video/mp4 | MP4動画データ |
application/pdf | PDFドキュメントデータ |
application/msword | Wordドキュメントデータ |
application/vnd.openxmlformats-officedocument.wordprocessingml.document | Wordドキュメントデータ(.docx 2007以降) |
application/vnd.ms-excel | Excelドキュメントデータ |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | Excelドキュメントデータ(.xlsx 2007以降) |
application/vnd.ms-powerpoint | PowerPointドキュメントデータ |
application/vnd.openxmlformats-officedocument.presentationml.presentation | PowerPointドキュメントデータ(.pptx 2007以降) |
application/octet-stream | 任意のバイナリデータ |
application/gzip | Gzip圧縮データ |
application/zip | ZIP圧縮データ |
application/x-lzh | LZHファイル |
application/x-tar | tarファイル/tar&gzipファイル |
*https://qiita.com/AkihiroTakamura/items/b93fbe511465f52bffaaより一部参照
上記のように、文字エンコーディングも合わせて指定する必要があります。この表を参考に、データの形式に応じて適切なContent-Typeを設定して利用しましょう。
APIでContent-Typeの活用
APIではリクエストとレスポンスのBodyにJSONやXMLなどのデータ形式を用いることが多いです。
この場合、Content-Typeを適切に設定することで、クライアントとAPIサーバーがデータ形式を正しく理解できるようになります。
- クライアントはリクエストBodyにJSONデータを含める場合、Content-Typeを
application/json
に設定 - APIサーバーはレスポンスBodyにXMLデータを含める場合、Content-Typeを
application/xml
に設定
このようにContent-Typeを設定することで、次のようなデータ処理を行うことが可能になります:
- クライアントはBodyがJSONであることを認識して適切にパースできる
- サーバーはBodyがXMLであることを認識して適切にパースできる
また、Content-Typeを設定しないとクライアント・サーバーがデータ形式を正しく解釈できないため、意図しない動作をしたりエラーが発生する可能性があります。
このため、APIではリクエストとレスポンスのBodyに何のデータを含めているかを明示するContent-Typeの設定が重要です。APIの仕様書などにContent-Typeの記載がある場合は、それに従って適切に実装する必要があります。
どこかでContent-Typeを設定する必要がある?
クライアントとサーバーの間で、データ通信を行う際に、API仕様に従って、複数箇条でContent-Typeを設定する必要があります。次は、Content-Typeの設定が必要となる主な場所を皆さんに紹介します:
HTTPリクエストのヘッダ
クライアントがリクエストBodyに含めるデータの形式をサーバーに伝えるために設定します。
HTTPレスポンスのヘッダ
サーバーがレスポンスBodyのデータ形式をクライアントに伝えるために設定します。
HTMLの<form>タグ
フォームから送信するデータの形式を指定します。
Ajax通信のコード
JavaScriptのXMLHttpRequestやfetch APIを使用する場合に、リクエストBodyのデータ形式を指定します。
APIのクライアントコード
外部APIを呼び出すためのライブラリやコードでは、リクエストBodyのデータ形式を明示的に設定します。
APIのサーバーコード
レスポンスBodyで返すデータの形式をHTTPヘッダに設定して返信します。
アップロードフォーム
ファイルアップロードフォームでは、送信するファイルの種類を指定します。
メールの送信コード
メール本文の内容形式(HTMLやプレーンテキスト)を指定します。
これらの場合において、適切なContent-Typeを設定することで、データの送受信がスムーズに行えるようになります。
Apidog:APIテスト時にContent-Typeの設定が楽々に
Apidogは、非常に使いやすいAPI管理ツールとして、APIのテスト時に、HeaderやBodyタブで簡単にContent-Typeを設定することができます。Bodyにデータを格納してAPIリクエストを送信したり、サーバーから返されるレスポンスのデータ形式を指定したりするためにも、Apidogは重宝なツールになると思います。
ステップ⒈Apidogを開いてAPIをテストする時に、「Body」タブに切り替えて、サーバー側に送信したいデータを追加することができます。ここで、JSON、XML、from-dataなどよく使われるContent-Typeがリストされているので、それをクリックすると、それぞれのContent-Type設定が自動的にHeaderタブに追加されますので、非常に便利です。
![BodyでContent-typeを指定](https://assets.apidog.com/blog-ja/2023/10/body-content-type-apidog.png)
ステップ⒉また、ここで使用したいContent-Typeが見つからない場合は、Headerタブに切り替えて、自分でContent-Typeを指定することも可能です。また、サーバーからレスポンスのデータ形式を指定するために、AcceptフィールドでContent-Typeを指定することも可能です。
![HeaderでContent-typeを指定](https://assets.apidog.com/blog-ja/2023/10/header-content-type-apidog.png)
このようにして、APIテストの際には、Apidogを使うことで、非常に直感的なUIでContent-Typeを指定することができますので、APIテストがこれまでにないほど便利になるのでしょう。
まとめ
この記事は、HTTP通信におけるContent-Typeについて詳しく解説していました。Content-Typeは送受信されるデータの形式を指定するヘッダ情報で、主にリクエストとレスポンスのBodyに含まれるデータの種類を表します。
APIを利用する場合、JSONやXMLなどのデータ形式をリクエストとレスポンスでやり取りすることが多く、その際にはContent-Typeの適切な設定が重要となります。リクエストとレスポンスのヘッダ、HTMLのformタグ、Ajax通信など、様々な場面でContent-Typeを指定する必要があるため、APIの仕様に従って実装することが大切です。
また、APIテストツールのApidogを使えばUIから簡単にContent-Typeを設定できるなど、APIテストが便利になります。