http服务器的本质是应答式的服务器。我们只需关注onRequest事件中的request(请求)和response(响应)对象。让我们一起回顾一下onRequest事件:
$http->on("request", function ($request, $response) {
$response->header("Content-Type", "text/html");
$response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
在这一节中,我们对请求对象展开讨论。
1、属性
Swoole\Http\Request->header: array:HTTP 请求的头部信息。类型为数组,所有 key 均为小写。
Swoole\Http\Request->server: array:HTTP 请求相关的服务器信息,相当于 PHP 的 $_SERVER 数组。包含了 HTTP 请求的方法,URL 路径,客户端 IP 等信息。
Swoole\Http\Request->get: array:HTTP 请求的 GET 参数,相当于 PHP 中的 $_GET。
注意:为防止 HASH 攻击,GET 参数最大不允许超过 128 个
Swoole\Http\Request->post: array:HTTP POST 参数,个数最大不超过 128 个。
注意:POST 与 Header 加起来的尺寸不得超过 package_max_length 的设置,否则会认为是恶意请求
Swoole\Http\Request->cookie: array:HTTP 请求携带的 COOKIE 信息,格式为键值对数组。
Swoole\Http\Request->files: array:上传文件信息。类型为以 form 名称为 key 的二维数组。与 PHP 的 $_FILES 相同。最大文件尺寸不得超过 package_max_length 设置的值。
注意:请勿使用 Swoole\Http\Server 处理大文件上传。
当 $request 对象销毁时,会自动删除上传的临时文……
Array
(
[name] => facepalm.jpg // 浏览器上传时传入的文件名称
[type] => image/jpeg // MIME类型
[tmp_name] => /tmp/swoole.upfile.n3FmFr // 上传的临时文件,文件名以/tmp/swoole.upfile开头
[size] => 15476 // 文件尺寸
[error] => 0
)
2、函数
Swoole\Http\Request->getContent(): string:获取原始的 POST 包体,用于非 application/x-www-form-urlencoded 格式的 HTTP POST 请求。返回原始 POST 数据,此函数等同于 PHP 的 fopen('php://input')
注意:Swoole 版本 >= v4.5.0 可用,在低版本可使用别名 rawContent (此别名将永久保留,即向下兼容)
有些情况下服务器不需要解析 HTTP POST 请求参数,通过 http_parse_post 配置,可以关闭 POST 数据解析。
Swoole\Http\Request->getData(): string:获取完整的原始 Http 请求报文。包括 Http Header 和 Http Body。
Swoole的http服务器非常精练,关于请求对象的属性与函数只有以上这些。下一节,我们将近入响应对象的讨论。