XML APIリクエストのContent-Type

APIにXMLデータを送信する際のContent-Typeヘッダーを設定します。application/xmlとtext/xmlの違い、charsetのベストプラクティスを解説します。

XML/SOAP

詳細な説明

XML Content-Type

APIにXMLデータを送信する際、推奨されるContent-Typeは明示的なcharset宣言付きのapplication/xmlです。

ヘッダー値

Content-Type: application/xml; charset=utf-8

application/xmlとtext/xmlの比較

特徴 application/xml text/xml
デフォルトcharset UTF-8 US-ASCII
バイナリ安全 はい いいえ(textサブタイプ)
推奨元 RFC 7303 RFC 7303(注意付き)

主な違い:charsetが指定されない場合、text/xmlはUS-ASCIIがデフォルトですが、application/xmlはXMLプロローグで宣言されたエンコーディング(<?xml encoding="..."?>)またはUTF-8がデフォルトです。これによりapplication/xmlは国際的なコンテンツにとってより安全です。

XMLプロローグとCharset

XMLプロローグもエンコーディングを宣言できます:

<?xml version="1.0" encoding="utf-8"?>

Content-Typeのcharsetとプロローグのエンコーディングの両方が存在する場合、text/xmlではContent-Typeのcharsetが優先され、application/xmlではプロローグが優先されます。

その他のXMLベースタイプ

メディアタイプ 用途
application/xhtml+xml XHTMLドキュメント
application/rss+xml RSSフィード
application/atom+xml Atomフィード
image/svg+xml SVG画像
application/mathml+xml MathML

curlの例

curl -X POST \
  -H "Content-Type: application/xml; charset=utf-8" \
  -d '<?xml version="1.0"?><request><action>query</action></request>' \
  https://api.example.com/xml

ユースケース

REST API、RSS/Atomフィードプロセッサ、構造化XMLデータを期待するエンドポイントにXMLペイロードを送信する際に使用します。新しい実装ではtext/xmlよりapplication/xmlを優先してください。

試してみる — Content-Type Header Builder

フルツールを開く