Acceptヘッダ(アクセプトヘッダ)とは | 意味や読み方など丁寧でわかりやすい用語解説
Acceptヘッダ(アクセプトヘッダ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
アクセプトヘッダ (アクセプトヘッダ)
英語表記
Accept-header (アクセプトヘッダー)
用語解説
Acceptヘッダは、ウェブ上で情報がやり取りされる際に使われるHTTPリクエストヘッダの一つである。クライアント、つまりウェブブラウザやスマートフォンアプリなどが、サーバーに対して「このような形式のデータをください」と伝えるために利用される。例えば、ウェブブラウザがウェブページを表示するためにHTML形式の情報を要求したり、スマートフォンアプリがサーバーからユーザー情報をJSON形式で取得したりする際に、Acceptヘッダがその要求内容を具体的に示す。サーバーは、このAcceptヘッダの内容を読み取り、クライアントが希望する形式で情報を提供しようと試みる。これは「コンテンツネゴシエーション」と呼ばれる仕組みの一部であり、クライアントとサーバーが互いの能力を認識し、最適な形式で通信するための重要な手段となっている。
このAcceptヘッダは、HTTPリクエストメッセージの開始行に続くヘッダ群の中に記述される。その値には、クライアントが受け入れ可能なデータ形式が「MIMEタイプ(Media Type)」という標準的な形式で指定される。MIMEタイプは、「タイプ/サブタイプ」という構造を持ち、例えばtext/htmlはHTMLドキュメントを、application/jsonはJSON形式のデータを、image/jpegはJPEG画像をそれぞれ表す。クライアントは一つのAcceptヘッダに複数のMIMEタイプを記述することができ、その際にはカンマで区切って列挙する。
さらに、クライアントは単に複数のMIMEタイプを列挙するだけでなく、それぞれに優先順位を付けることも可能である。この優先順位は「q値(Quality Value)」というパラメータを用いて表現される。q値はq=に続けて0.0から1.0までの数値を記述し、1.0が最も高い優先度を示し、0.0は受け入れ不可であることを意味する。例えば、text/html, application/xhtml+xml;q=0.9, application/xml;q=0.8というAcceptヘッダがあった場合、クライアントはまずHTML形式(q値が指定されていないためデフォルトの1.0)を最も優先し、次にXHTML形式(q値0.9)、そしてXML形式(q値0.8)の順で受け取りたいとサーバーに伝えていることになる。もしq値が指定されていないMIMEタイプが複数ある場合は、一般的に左から右の順に優先される。また、*/*のようなワイルドカードを使用することも可能で、これは「あらゆるタイプとサブタイプ」のデータを受け入れることを意味する。例えば、text/*は「あらゆるテキスト形式」を受け入れることを示す。ワイルドカードにもq値を適用でき、*/*;q=0.8のように記述することで、特定の形式よりも優先度を下げて「何でもいいが、もし特定の形式があればそちらを優先してほしい」という意図を伝えることができる。
サーバー側は、このAcceptヘッダを受け取ると、クライアントが指定したMIMEタイプとq値に基づき、自身が提供できるデータの中から最適な形式を選択してレスポンスボディとして返す。例えば、クライアントがAccept: application/json, text/xml;q=0.9と送り、サーバーがJSONとXML両方のデータを用意できる場合、q値がより高いapplication/json形式でデータを返すことが期待される。もしサーバーがクライアントの要求するMIMEタイプに対応するデータを持たない場合、サーバーはデフォルトのMIMEタイプで応答するか、またはHTTPステータスコード406 Not Acceptableを返して、クライアントの要求を満たせないことを通知することもある。
ウェブブラウザが送信するAcceptヘッダは非常に複雑になる傾向がある。多くのブラウザは、text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8のように、HTML、XHTML、XML、特定の画像形式、そして優先度を下げた「何でも可」という複数の形式を列挙する。これは、ブラウザが様々なウェブコンテンツに対応できるよう、柔軟な要求を行うためである。一方で、RESTful APIのクライアントでは、Accept: application/jsonのように、特定のデータ形式のみを明確に要求するシンプルなAcceptヘッダがよく使われる。このように、Acceptヘッダはクライアントがサーバーに対して意図を正確に伝え、サーバーがそれに応じて最適なコンテンツを提供する上で不可欠な役割を担っている。