Значение запроса на стороне сервера

Мне было интересно, может ли кто-нибудь объяснить мне значение запроса на стороне сервера. Это может быть просто терминология, которую я не совсем понимаю. Для меня это звучит как запрос от сервера к клиенту, но я не думаю, что это так.

Это касается PHP PSR7. Я пытаюсь выяснить, почему он имеет как RequestInterface и ServerRequestInterface, Я нигде не могу ничего сказать об этом, и я не вижу причины, по которой эти два не просто объединены в один интерфейс.

2 ответа

Решение

Я согласен, что не ясно, что они подразумевают под "запросами на стороне сервера". Известно, что HTTP-запросы отправляются клиентами (браузерами, ботами, пользователями REST API и т. Д.) И, в конце концов, принимаются серверами. Однако слово "сервер" может относиться к разным вещам в разных контекстах.

HTTP-запрос получен HTTP-сервером, таким как Apache, Nginx и Microsoft IIS. Серверы предоставляют интерфейс прикладного программирования сервера (SAPI), который, в частности, позволяет постобработать информацию, анализируемую веб-серверами.

Механизм PHP (Zend) взаимодействует с различными средами посредством своего модуля SAPI (Server API). Модуль состоит из нескольких подмодулей: CLI (интерфейс командной строки), CGI (общий интерфейс шлюза), Apache, FPM (FastCGI Process Manager) и другие. У каждого есть свои представления о содержании суперглобалистов PHP ( пример).

Необработанные HTTP-запросы анализируются веб-сервером. PHP запрашивает проанализированные данные с веб-сервера через SAPI для дальнейшей обработки, а затем передает их нам, в частности, в виде суперглобалистов.

RequestInterface таким образом, представляет первый простой HTTP-запрос, который не классифицирует его заголовки или части тела сообщения на файлы cookie, данные загрузки, GET- или POST-переменные и т. д., как это косвенно упоминается в официальной документации:

RequestInterface а также ResponseInterface по существу имеют корреляции 1:1 с сообщениями запроса и ответа, описанными в RFC 7230. Они предоставляют интерфейсы для реализации объектов значений, которые соответствуют конкретным типам сообщений HTTP, которые они моделируют.

Он просто предоставляет интерфейс для общих параметров запроса, таких как, например, URI, схема, запрос и порт.

А также ServerRequestInterface представляет разобранную версию простого представления HTTP-сообщения (запроса). Он предоставляет доступ к логически классифицированным частям сообщения, частям, созданным на стороне сервера: загруженные файлы, файлы cookie, параметры сервера и другие.

Я предлагаю подумать о RequestInterface как HTTP-запрос, как он пришел от клиента. А также ServerRequestInterface как уже не совсем клиентский запрос =), т.е. версия исходного запроса, измененная сервером (SAPI).

Не могу дать лучший ответ, чем:

RequestInterface обеспечивает общее представление сообщения HTTP-запроса. Однако запросы на стороне сервера нуждаются в дополнительной обработке из-за особенностей среды на стороне сервера. При обработке на стороне сервера необходимо учитывать Common Gateway Interface (CGI) и, в частности, абстракцию PHP и расширение CGI через его API-интерфейсы сервера (SAPI). PHP обеспечил упрощение маршалинга ввода с помощью суперглобалистов, таких как:

..

ServerRequestInterface расширяет RequestInterface, чтобы обеспечить абстракцию вокруг этих различных суперглобальных элементов. Эта практика помогает уменьшить связь с суперглобалами со стороны потребителей, а также поощряет и продвигает способность тестировать запросы потребителей.

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

Другие вопросы по тегам