6

我想知道是否有人可以向我解释服务器端请求的含义。这可能只是我不太明白的术语。对我来说,这听起来像是从服务器到客户端的请求,但我不认为就是这样。

这是关于 PHP PSR7 的。我试图弄清楚为什么它同时具有RequestInterfaceServerRequestInterface. 我无法在任何地方对它进行任何细化,也看不出为什么这两个不只是合并到一个界面中的原因。

4

2 回答 2

5

我同意不清楚“服务器端请求”是什么意思。众所周知,HTTP 请求是由客户端(浏览器、机器人、REST API 用户等)发送的,然后由服务器接收。但是,“服务器”一词在不同的上下文中可能指代不同的事物。

HTTP 请求由HTTP 服务器(如 Apache、Nginx 和 Microsoft IIS)接收。服务器提供服务器应用程序编程接口 (SAPI),它特别允许对 Web 服务器解析的信息进行后处理。

PHP 引擎 (Zend) 通过其 SAPI ( Server API ) 模块与不同的环境进行交互。该模块由许多子模块组成:CLI(命令行接口)、CGI(通用网关接口)、Apache、FPM(FastCGI 进程管理器)等。对于 PHP 超全局变量(示例)的内容,每个人都有自己的想法。

原始 HTTP 请求由 Web 服务器解析。PHP 通过 SAPI 向 Web 服务器请求解析后的数据进行进一步处理,然后以超全局变量的形式传递给我们。

RequestInterface因此代表第一个简单的HTTP 请求,它没有将其标头或消息正文的部分分类为 cookie、上传数据、GET 或 POST 变量等,正如官方文档中间接提到的那样:

RequestInterface和本质上与 RFC 7230 中描述的请求和响应消息具有 1:1 的相关性。ResponseInterface它们提供了用于实现与它们所建模的特定 HTTP 消息类型相对应的值对象的接口。

它只是为常见的请求参数(例如 URI、方案、查询和端口)提供接口。

ServerRequestInterface表示解析后的版本,简单表示 HTTP 消息(请求)。它介绍了对消息的逻辑分类部分的访问,这些部分在服务器端生成:上传的文件、cookie、服务器参数等。

我建议将其视为来自客户端的RequestInterfaceHTTP请求。并且ServerRequestInterface由于已经不是客户端的请求=),即服务器修改的原始请求版本(SAPI)。

于 2016-10-13T09:06:07.813 回答
1

无法给出比以下更好的答案:

RequestInterface 提供 HTTP 请求消息的一般表示。但是,由于服务器端环境的性质,服务器端请求需要额外处理。服务器端处理需要考虑通用网关接口 (CGI),更具体地说,是 PHP 通过其服务器 API (SAPI) 对 CGI 的抽象和扩展。PHP 通过超全局变量简化了输入编组,例如:

..

ServerRequestInterface 扩展 RequestInterface 以提供围绕这些各种超全局变量的抽象。这种做法有助于减少消费者与超全局变量的耦合,并鼓励和促进测试请求消费者的能力。

http://www.php-fig.org/psr/psr-7/

于 2016-10-13T02:16:47.133 回答