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

#php #httprequest #psr-7

#php #httprequest #psr-7

Вопрос:

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

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

Ответ №1:

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

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

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

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

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

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

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

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

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

Комментарии:

1. Спасибо, это имеет гораздо больше смысла. Больше всего меня поразил тот факт, что в документации PSR7 они называют это запросами на стороне сервера и на стороне клиента. На стороне сервера звучит как сервер, выполняющий запрос, а на стороне клиента — наоборот. Необработанный запрос против Запрос, обработанный SAPI, имеет больше смысла.

Ответ №2:

не могу дать лучшего ответа, чем:

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

..

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

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

Комментарии:

1. Это объясняет, что запросы сервера нуждаются в дополнительной обработке, но не то, что такое запрос сервера. Что / кто делает такой запрос? Запрос сервера против запроса клиента, вот что мне нужно.

2. запрос сервера = HTTP-запрос. это понятно? сервер в данном случае является http-сервером

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

4. RequestInterface охватывает все запросы от клиента к серверу. а ServerRequestInterface имеет дело с особенностями суперглобал