## 2 `wsgiref.headers` - WSGI レスポンスヘッダツール群

このモジュールは単一のクラス、`Headers` を提供し、WSGI レスポンスヘッダの 操作をマップに似たインターフェースで便利にします。

クラス `Headers`( | headers)

  headers をラップするマップに似たオブジェクトを生成します。これは PEP 333 に定義されるようなヘッダの名前／値のタプルのリストです。 新しい `Headers` オブジェクトに与えられた変更は、一緒に作成された headers リストを直接更新します。

  `Headers` オブジェクトは典型的なマッピング操作をサポートし、これには `__getitem__`、`get`、`__setitem__`、 `setdefault`、`__delitem__`、`__contains__` と `has_key` を含みます。これらメソッドのそれぞれにおいて、キーは ヘッダ名で（大文字小文字は区別しません）、値はそのヘッダ名に関連づけられた 最初の値です。ヘッダを設定すると既存のヘッダ値は削除され、ラップされた ヘッダのリストの末尾に新しい値が加えられます。既存のヘッダの順番は 一般的に整えられていて、ラップされたリストの最後に新しいヘッダが追加されます。

  辞書とは違って、`Headers` オブジェクトはラップされたヘッダリストに 存在しないキーを取得または削除しようとした場合にもエラーを発生しません。 単に、存在しないヘッダの取得は `None` を返し、存在しないヘッダの削除は 何もしません。

  `Headers` オブジェクトは `keys()`、`values()`、 `items()` メソッドもサポートします。`keys()` と `items()` で 返されるリストは、同じキーを一回以上含むことがあり、これは複数の値を持つヘッダの場合です。 `Header` オブジェクトの `len()` は、その `items()` の長さと同じであり、 ラップされたヘッダリストの長さと同じです。事実、`items()` メソッドは 単にラップされたヘッダリストのコピーを返しているだけです。

  `Headers` オブジェクトに対して `str()` を呼ぶと、HTTP レスポンスヘッダとして 送信するのに適した形に整形された文字列を返します。それぞれのヘッダはコロンとスペースで 区切られた値と共に一列に並んでいます。 それぞれの行はキャリッジリターンとラインフィードで終了し、文字列は空行で終了しています。

  これらのマッピングインターフェースと整形機能に加えて、`Headers` オブジェクトは 複数の値を持つヘッダの取得と追加、MIME パラメタでヘッダを追加するための 以下のようなメソッド群も持っています：

  `get_all`( | name)

    指定されたヘッダの全ての値のリストを返します。

    返されるリストは、元々のヘッダリストに現れる順、またはこのインスタンスに 追加された順に並んでいて、複製を含む場合があります。削除されて加えられた フィールドは全てヘッダリストの末尾に付きます。ある名前のフィールドが何もなければ、 空のリストが返ります。

  `add_header`( | name, value, **_params)

    ヘッダ（複数の値かもしれません）を、キーワード引数を通じて指定する オプションの MIME パラメタと共に追加します。

    name は追加するヘッダフィールドです。このヘッダフィールドに MIME パラメタを 設定するためにキーワード引数を使うことができます。それぞれのパラメタは文字列か `None` で なければいけません。パラメタ中のアンダースコアはダッシュに変換されます、これはダッシュが Python の識別子としては不正なのですが、多くの MIME パラメタはダッシュを含むためです。 パラメタ値が文字列の場合、これはヘッダ値のパラメタに `name="value"` の形で追加されます。 これがもし `None` の場合、パラメタ名だけが追加されます。（これは値なしの MIME パラメタの 場合に使われます。）使い方の例は：

        h.add_header('content-disposition', 'attachment', filename='bud.gif')

    上記はこのようなヘッダを追加します：

        Content-Disposition: attachment; filename="bud.gif"