# HTTP 消息

Message 类提供了一个统一的接口，用于访问 HTTP 消息中“请求”和“响应”所共有的部分，其中包括消息正文、协议版本、操作标头信息的辅助方法，以及处理内容协商的方法。

这个类是 Request 类 和 Response 类 的父类，通常不直接使用。

## 类参考

class CodeIgniter\HTTP\Message
  getBody()
    返回:

      当前消息正文

    返回类型:

      `mixed`

    返回当前消息正文，如果已设置的话。如果正文不存在，返回 null：

        <?php

        echo $message->getBody();

  setBody($data)
    参数:

      - $data (`mixed`) -- 消息正文。

    返回:

      Message|Response 实例，允许方法链式调用。

    返回类型:

      `CodeIgniter\HTTP\Message|CodeIgniter\HTTP\Response`

    设置当前请求的正文。

  appendBody($data)
    参数:

      - $data (`mixed`) -- 消息正文。

    返回:

      Message|Response 实例，允许方法链式调用。

    返回类型:

      `CodeIgniter\HTTP\Message|CodeIgniter\HTTP\Response`

    将数据追加到当前请求的正文。

  populateHeaders()
    返回:

      void

    扫描并解析 SERVER 数据中的标头，并将其存储以供后续访问。 IncomingRequest 类 使用此方法使 当前请求的标头可用。

    标头是以 `HTTP_` 开头的任何 SERVER 数据，例如 `HTTP_HOST`。每个标头 都会从标准的大写加下划线格式转换为单词首字母大写加短横线的格式。 字符串前面的 `HTTP_` 会被移除。因此 `HTTP_ACCEPT_LANGUAGE` 变为 `Accept-Language`。

  headers()
    返回:

      所有找到的标头的数组。

    返回类型:

      `array`

    返回所有找到或之前设置的标头的数组。

  header($name)
    参数:

      - $name (`string`) -- 你要获取值的标头名称。

    返回:

      返回单个标头对象。如果存在多个同名标头，则返回标头对象的数组。

    返回类型:

      `CodeIgniter\HTTP\Header|array`

    允许你获取单个消息标头的当前值。`$name` 是不区分大小写的标头名称。 虽然标头在内部如上所述进行了转换，但你可以使用任何大小写形式访问标头：

        <?php

        // These are all the same:
        $message->header('HOST');
        $message->header('Host');
        $message->header('host');

    如果标头有多个值，`getValue()` 将返回值的数组。你可以使用 `getValueLine()` 方法以字符串形式获取值：

        <?php

        echo $message->header('Accept-Language');
        /*
         * Outputs something like:
         * 'Accept-Language: en,en-US'
         */

        echo $message->header('Accept-Language')->getValue();
        /*
         * Outputs something like:
         * [
         *     'en',
         *     'en-US',
         * ]
         */

        echo $message->header('Accept-Language')->getValueLine();
        /*
         * Outputs something like:
         * en,en-US'
         */

    你可以通过传入第二个参数作为过滤值来过滤标头：

        <?php

        $message->header('Document-URI', FILTER_SANITIZE_URL);

  hasHeader($name)
    参数:

      - $name (`string`) -- 你要检查是否存在的标头名称。

    返回:

      如果存在返回 true，否则返回 false。

    返回类型:

      `bool`

  getHeaderLine($name)
    参数:

      - $name (`string`) -- 要获取的标头名称。

    返回:

      表示标头值的字符串。

    返回类型:

      `string`

    以字符串形式返回标头的值。当标头有多个值时，此方法允许你轻松获取标头值的 字符串表示形式。这些值会被适当地连接起来：

        <?php

        echo $message->getHeaderLine('Accept-Language');
        /*
         * Outputs:
         * 'en,en-US'
         */

  setHeader($name, $value)
    参数:

      - $name (`string`) -- 要设置值的标头名称。

      - $value (`mixed`) -- 要设置的标头值。

    返回:

      当前 Message|Response 实例

    返回类型:

      `CodeIgniter\HTTP\Message|CodeIgniter\HTTP\Response`

    设置单个标头的值。`$name` 是不区分大小写的标头名称。如果集合中尚不存在 该标头，则会创建它。`$value` 可以是字符串或字符串数组：

        <?php

        $message->setHeader('Host', 'codeigniter.com');

  removeHeader($name)
    参数:

      - $name (`string`) -- 要移除的标头名称。

    返回:

      当前消息实例

    返回类型:

      `CodeIgniter\HTTP\Message`

    从消息中移除标头。`$name` 是不区分大小写的标头名称：

        <?php

        $message->removeHeader('Host');

  appendHeader($name, $value)
    参数:

      - $name (`string`) -- 要修改的标头名称

      - $value (`string`) -- 要添加到标头的值。

    返回:

      当前消息实例

    返回类型:

      `CodeIgniter\HTTP\Message`

    向现有标头添加值。该标头必须已经是值的数组，而不是单个字符串。 如果是字符串，将抛出 LogicException 异常。

        <?php

        $message->appendHeader('Accept-Language', 'en-US; q=0.8');

  prependHeader($name, $value)
    参数:

      - $name (`string`) -- 要修改的标头名称

      - $value (`string`) -- 要在标头前面添加的值。

    返回:

      当前消息实例

    返回类型:

      `CodeIgniter\HTTP\Message`

    向现有标头前面添加一个值。该标头必须已经是值的数组，而不是单个字符串。 如果是字符串，将抛出 LogicException 异常。

        <?php

        $message->prependHeader('Accept-Language', 'en,');

  addHeader($name, $value)

    Added in version 4.5.0.

    参数:

      - $name (`string`) -- 要添加的标头名称。

      - $value (`string`) -- 标头的值。

    返回:

      当前消息实例

    返回类型:

      `CodeIgniter\HTTP\Message`

    添加具有相同名称的标头（不仅仅是标头值）。 仅当你设置多个同名标头时使用此方法，

        <?php

        $message->addHeader('Set-Cookie', 'logged_in=no; Path=/');
        $message->addHeader('Set-Cookie', 'sessid=123456; Path=/');

  getProtocolVersion()
    返回:

      当前 HTTP 协议版本

    返回类型:

      `string`

    返回消息的当前 HTTP 协议。如果未设置，将返回 `1.1`。

  setProtocolVersion($version)
    参数:

      - $version (`string`) -- HTTP 协议版本

    返回:

      当前消息实例

    返回类型:

      `CodeIgniter\HTTP\Message`

    设置此消息使用的 HTTP 协议版本。有效值为 `1.0`、`1.1`、`2.0` 和 `3.0`：

        <?php

        $message->setProtocolVersion('1.1');