# Request消息
此页面参照了EasySwoole Distributed的文档,原文档地址
[https://www.kancloud.cn/tmtbe/goswoole/1107277]: https://www.kancloud.cn/tmtbe/goswoole/1107277
## MessageInterface 接口
### 3.1 `Psr\Http\Message\MessageInterface`
```php
<?php
namespace Psr\Http\Message;
/**
*
* HTTP 消息包括客户端向服务器发起的「请求」和服务器端返回给客户端的「响应」。
* 此接口定义了他们通用的方法。
*
* HTTP 消息是被视为无法修改的,所有能修改状态的方法,都 **必须** 有一套
* 机制,在内部保持好原有的内容,然后把修改状态后的信息返回。
*
* @see http://www.ietf.org/rfc/rfc7230.txt
* @see http://www.ietf.org/rfc/rfc7231.txt
*/
interface MessageInterface
{
/**
* 获取字符串形式的 HTTP 协议版本信息。
*
* 字符串 **必须** 包含 HTTP 版本数字(如:「1.1」, 「1.0」)。
*
* @return string HTTP 协议版本
*/
public function getProtocolVersion();
/**
* 返回指定 HTTP 版本号的消息实例。
*
* 传参的版本号只 **必须** 包含 HTTP 版本数字,如:"1.1", "1.0"。
*
* 此方法在实现的时候,**必须** 保留原有的不可修改的 HTTP 消息对象,然后返回
* 一个新的带有传参进去的 HTTP 版本的实例
*
* @param string $version HTTP 版本信息
* @return self
*/
public function withProtocolVersion($version);
/**
* 获取所有的报头信息
*
* 返回的二维数组中,第一维数组的「键」代表单条报头信息的名字,「值」是
* 以数组形式返回的,见以下实例:
*
* // 把「值」的数据当成字串打印出来
* foreach ($message->getHeaders() as $name => $values) {
* echo $name . ': ' . implode(', ', $values);
* }
*
* // 迭代的循环二维数组
* foreach ($message->getHeaders() as $name => $values) {
* foreach ($values as $value) {
* header(sprintf('%s: %s', $name, $value), false);
* }
* }
*
* 虽然报头信息是没有大小写之分,但是使用 `getHeaders()` 会返回保留了原本
* 大小写形式的内容。
*
* @return string[][] 返回一个两维数组,第一维数组的「键」 **必须** 为单条报头信息的
* 名称,对应的是由字串组成的数组,请注意,对应的「值」 **必须** 是数组形式的。
*/
public function getHeaders();
/**
* 检查是否报头信息中包含有此名称的值,不区分大小写
*
* @param string $name 不区分大小写的报头信息名称
* @return bool 找到返回 true,未找到返回 false
*/
public function hasHeader($name);
/**
* 根据给定的名称,获取一条报头信息,不区分大小写,以数组形式返回
*
* 此方法以数组形式返回对应名称的报头信息。
*
* 如果没有对应的报头信息,**必须** 返回一个空数组。
*
* @param string $name 不区分大小写的报头字段名称。
* @return string[] 返回报头信息中,对应名称的,由字符串组成的数组值,如果没有对应
* 的内容,**必须** 返回空数组。
*/
public function getHeader($name);
/**
* 根据给定的名称,获取一条报头信息,不区分大小写,以逗号分隔的形式返回
*
* 此方法返回所有对应的报头信息,并将其使用逗号分隔的方法拼接起来。
*
* 注意:不是所有的报头信息都可使用逗号分隔的方法来拼接,对于那些报头信息,请使用
* `getHeader()` 方法来获取。
*
* 如果没有对应的报头信息,此方法 **必须** 返回一个空字符串。
*
* @param string $name 不区分大小写的报头字段名称。
* @return string 返回报头信息中,对应名称的,由逗号分隔组成的字串,如果没有对应
* 的内容,**必须** 返回空字符串。
*/
public function getHeaderLine($name);
/**
* 返回替换指定报头信息「键/值」对的消息实例。
*
* 虽然报头信息是不区分大小写的,但是此方法必须保留其传参时的大小写状态,并能够在
* 调用 `getHeaders()` 的时候被取出。
*
* 此方法在实现的时候,**必须** 保留原有的不可修改的 HTTP 消息对象,然后返回
* 一个更新后带有传参进去报头信息的实例
*
* @param string $name 不区分大小写的报头字段名称。
* @param string|string[] $value 报头信息或报头信息数组。
* @return self
* @throws \InvalidArgumentException 无效的报头字段或报头信息时抛出
*/
public function withHeader($name, $value);
/**
* 返回一个报头信息增量的 HTTP 消息实例。
*
* 原有的报头信息会被保留,新的值会作为增量加上,如果报头信息不存在的话,字段会被加上。
*
* 此方法在实现的时候,**必须** 保留原有的不可修改的 HTTP 消息对象,然后返回
* 一个新的修改过的 HTTP 消息实例。
*
* @param string $name 不区分大小写的报头字段名称。
* @param string|string[] $value 报头信息或报头信息数组。
* @return self
* @throws \InvalidArgumentException 报头字段名称非法时会被抛出。
* @throws \InvalidArgumentException 报头头信息的值非法的时候会被抛出。
*/
public function withAddedHeader($name, $value);
/**
* 返回被移除掉指定报头信息的 HTTP 消息实例。
*
* 报头信息字段在解析的时候,**必须** 保证是不区分大小写的。
*
* 此方法在实现的时候,**必须** 保留原有的不可修改的 HTTP 消息对象,然后返回
* 一个新的修改过的 HTTP 消息实例。
*
* @param string $name 不区分大小写的头部字段名称。
* @return self
*/
public function withoutHeader($name);
/**
* 获取 HTTP 消息的内容。
*
* @return StreamInterface 以数据流的形式返回。
*/
public function getBody();
/**
* 返回指定内容的 HTTP 消息实例。
*
* 内容 **必须** 是 `StreamInterface` 接口的实例。
*
* 此方法在实现的时候,**必须** 保留原有的不可修改的 HTTP 消息对象,然后返回
* 一个新的修改过的 HTTP 消息实例。
*
* @param StreamInterface $body 数据流形式的内容。
* @return self
* @throws \InvalidArgumentException 当消息内容不正确的时候抛出。
*/
public function withBody(StreamInterface $body);
}
```
- 1 介绍
- 2 安装
- 2.1 环境
- 2.2 安装
- 3 配置
- 3.1 Server配置
- 3.2 端口配置
- 3.3 项目结构
- 3.4 内核优化
- 4 服务
- 4.1 HTTP服务
- 4.1.1 路由
- 4.1.1.1 静态路由
- 4.1.1.2 路由定义
- 4.1.1.3 路由方法
- 4.1.1.4 路由分组
- 4.1.1.5 资源路由
- 4.1.1.6 端口作用域
- 4.1.1.7 异常处理
- 4.1.1.8 跨域请求
- 4.1.1.9 路由缓存
- 4.1.2 控制器
- 4.1.2.1 控制器初始化
- 4.1.2.2 前置后置操作
- 4.1.2.3 跳转与重定向
- 4.1.2.4 异常处理
- 4.1.3 请求
- 4.1.3.1 请求对象
- 4.1.3.2 请求信息
- 4.1.3.3 REQUEST消息
- 4.1.3.4 RESPONSE消息
- 4.1.3.5 STREAM消息
- 4.1.3.6 URI信息
- 4.1.3.7 处理上传文件
- 4.1.3.8 验证器
- 4.2 Websocket服务
- 4.2.1 Websocket配置
- 4.2.2 Websocket路由
- 4.3 TCP服务
- 4.3.1 TCP配置
- 4.3.2 TCP路由
- 4.3.3 协程处理案例
- 5 插件
- 5.15 Yii-PDO插件
- 5.15.1 PDO 连接MySQL Mariadb
- 5.15.2 PDO连接PostgreSQL
- 5.15.3 PDO连接GreenPlum
- 5.15.4 PDO连接Oracle
- 5.15.5 PDO连接Cubrid
- 5.15.6 PDO连接SQL Server
- 6 概念
- 7. Yii- I18N国际化
- 8. 模型 Yii-Model
- 8.1 快速创建模型
- 8.2 快速创建多个模型
- 8.3 核心验证器 Core Validators
- 9. 配合数据库工作
- 9.1.数据库访问对象 Database Access Objects
- 9.2 查询构造器 Query Builder
- 9.3 活动记录 Active Record
