[14] [DFN[[CODE(HTTP)@en[[[Want-Digest:]]]]]] [[ヘッダー]]は、
[[クライアント]]が希望する[[ダイジェストアルゴリズム]]を指定するものです。

* 仕様書

[REFS[
- [2] '''[CITE@en[RFC 3230 - Instance Digests in HTTP]] ([TIME[2014-08-31 18:57:37 +09:00]] 版) <http://tools.ietf.org/html/rfc3230#section-4.3.1>'''
- [17] [CITE@en[RFC 6249 - Metalink/HTTP: Mirrors and Hashes]] ([TIME[2014-09-07 22:47:12 +09:00]] 版) <http://tools.ietf.org/html/rfc6249#section-2>
]REFS]

* 意味

[3] [CODE(HTTP)@en[[[Want-Digest:]]]] [[ヘッダー]]は、
[[送信者]]が[[要求URL]]に関連付けられた[[メッセージ]]の[[実現値ダイジェスト]]を受信することを望んでいると示すものです [SRC[>>2]]。

[15] [CODE(HTTP)@en[[[Content-MD5:]]]] [[ヘッダー]]の受信を望んでいるかどうかを示す値
[CODE(HTTP)@en[[[contentMD5]]]] も定義されています。

* 構文

[4] この[[ヘッダー]]の値は、0個以上の値の[[リスト]] ([CODE(HTTP)[#]]) です [SRC[>>2]]。

[FIG(railroad)[
= ?
== 値
== *
=== [[OWS]]
=== [CODE(HTTP)[[[,]]]]
=== [[OWS]]
=== 値
]FIG]

[5] それぞれの値は、[[ダイジェストアルゴリズム]]の名前と、
省略可能な [CODE(HTTP)[[[q]]]] [[引数]]です [SRC[>>2]]。

[6] 仕様書の時代的に構文上明記されていませんが、 [CODE(HTTP)[[[;]]]]
の前後には[[空白]]が挿入できると思われます。

[FIG(railroad)[
= [[ダイジェストアルゴリズム]]
= ?
== [[OWS]]
== [CODE(HTTP)[[[;]]]]
== [[OWS]]
== [CODE(HTTP)[[[q]]]]
== [CODE(HTTP)[[[=]]]]
== [[q値]]
]FIG]

* [CODE(HTTP)[q]] 引数

[10] [[ダイジェストアルゴリズム]]には [CODE(HTTP)[[[q]]]] [[引数]]を指定できます。
指定しない場合、[[q値]] 1.0 とみなします [SRC[>>2]]。

[7] [CODE(HTTP)[[[q]]]] [[引数]]の名前は[[大文字・小文字不区別]]です [SRC[>>2]]。

[13] 複数の[[ダイジェストアルゴリズム]]が指定された場合は、
[[q値]]が最高のもの(たち)が[[送信者]]が[RUBYB[より好んでいる]@en[preferred]][[ダイジェストアルゴリズム]]となります。 [SRC[>>2]]

[11] [[送信者]]が受信することを望んでいるのは、 [CODE(HTTP)@en[[[Want-Digest:]]]]
[[ヘッダー]]で明示され、 [[q値]]が 0 でない[[ダイジェストアルゴリズム]]のみです [SRC[>>2]]。

;; [12] この[[ヘッダー]]が指定されなければ、どの[[ダイジェストアルゴリズム]]も望んでいないことになります。

;; [16] [CODE(HTTP)@en[[[Want-Digest:]]]] で指定されなかったり、 [[q値]]として 0
が指定されたりしても、 [CODE(HTTP)@en[[[Digest:]]]] や [CODE(HTTP)@en[[[Content-MD5:]]]]
の[[生成]]が禁止されているわけでは無いようです。 ([CODE(HTTP)@en[[[Digest:]]]] 参照。)

* 文脈

[18] [[Metalink/HTTP]] [[クライアント]]は、[[実現値ダイジェスト]]を要求しなければ[['''なりません''']] [SRC[>>17]]。

* 歴史

[FIG(quote)[
[FIGCAPTION[
[1] RFC 3230 (実現値要約) 4.3.1 Want-Digest
]FIGCAPTION]

> The Want-Digest message header field indicates the sender's desire to
receive an instance digest on messages associated with the Request-URI.

[CODE(HTTP)[Want-Digest]] [[メッセージ頭欄]]は、
[CODE(ABNF)[[[Request-URI]]]] に関連付けられた[[メッセージ]]に関する[[実現値]]を受信するとの[[送信者]]の希望を示します。

>
- Want-Digest = "Want-Digest" ":"
#([[digest-algorithm]] [ ";" "[[q]]" "=" qvalue])

> If a digest-algorithm is not accompanied by a qvalue, it is treated
as if its associated qvalue were 1.0.

[CODE(ABNF)[digest-algorithm]] に [CODE(ABNF)[[[qvalue]]]]
が添えられていなければ、関連付けられた [CODE(ABNF)[qvalue]]
は [CODE(HTTP)[1.0]] であるものとして扱います。

> The sender is willing to accept a digest-algorithm if and only if it
is listed in a Want-Digest header field of a message, and its qvalue
is non-zero.

メッセージの [CODE(HTTP)[Want-Digest]] 頭欄に [CODE(ABNF)[digest-algorithm]] が列せられていて、その [CODE(ABNF)[qvalue]]
が非零であるとき、この場合に限って[[送信者]]はその [CODE(ABNF)[digest-algorithm]] を受け入れる意志があります。

> If multiple acceptable digest-algorithm values are given, the
sender's preferred digest-algorithm is the one (or ones) with the
highest qvalue.

複数の受け入れ可能な [CODE(ABNF)[digest-algorithm]] 値が与えられた時は、
送信者の好む [CODE(ABNF)[digest-algorithm]] は最高の [CODE(ABNF)[qvalue]]
をもつ物(達)です。

> Examples:
- Want-Digest: md5
- Want-Digest: MD5;q=0.3, sha;q=1
]FIG]

[9] [[RFC 4229]] は[[IANA登録簿]]に状態「[[標準]]」で登録しています [SRC[>>8]]。

[REFS[
- [8] [CITE@en[RFC 4229 - HTTP Header Field Registrations]] ([TIME[2014-11-02 18:53:20 +09:00]] 版) <http://tools.ietf.org/html/rfc4229#section-2.1.115>
]REFS]