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.01.12.03.0

<?php

$message->setProtocolVersion('1.1');