За последние 24 часа нас посетил 53991 программист и 1765 роботов. Сейчас ищут 1638 программистов ...

Как формируется ответ сервера?

Тема в разделе "PHP для новичков", создана пользователем Rezovskij, 4 сен 2016.

  1. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    Предположим, что выполнился запрос такой запрос http://site.ru/?welcome=vsemPrivet, сервер подгрузил какой-то php скрипт, а в в скрипте всего одна строчка, например
    Код (Text):
    1. echo $_GET['welcome']
    .
    Собственно, мне интересно узнать, какие выполняются операции после работы интерпритатора до отправки http ответа. Довольно долго искал информацию, но что-то безуспешно.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    отправка заголовков (свойств браузера), куки если есть.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Парсится тело запроса, парсится скрипт, выполняются команды. С некоторых пор выполняется just-in-time компиляция. О парсинге пхп-скриптов можно сложить мнение благодаря встроенной функции, которая парсит строку, возвращает кучу токенов.
     
  4. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    @igordata а какие данные после компиляции php передает серверу? php формирует ответ или сервер на основе переданных формирует ответ?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Rezovskij PHP по FCGI/CGI или другим методом передаёт результат своей работы веб-серверу, обычно веб-сервер может добавить в заголовки размер ответа, может ещё заниматься сжатием данных.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    PHP формирует ответ PHP-машины, а ответ сервера формирует сервер :)
     
  7. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    @denis01@Fell-x27, Правильно ли я понимаю, php по завершению компиляции формирует какое-то сообщение серверу, а на основе этого сообщения сервер уже формирует ответ на запрос и добавляет некоторую информацию в заголовках?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    По завершению "компиляции php" скрипт для начала начинает работу. Скрипт php сегодня исполняется не построчно в процессе интерпретации, а, все же, тут есть JIT. На этой особенности основаны всякие аккселераторы, которые позволяют сохранять скопилированный php в памяти, и, при последующих вызовах сразу запускать исполнение, а не тратить время на повторную интерпретацию.

    В ходе работы php открывает поток и пишет в буфер вывода сервера все, что ты там внутри скрипта эхаешь, принтишь, вардампишь и тд. Если ты пользуешься буфером вывода php, то тогда наружу, во время работы, до ее окончания, будут слаться только заголовки. Весь остальной контент будет набиваться в буфер вывода php. Когда скрипт закончит работу, он прокинет весь свой буфер вывода в поток, из которого читает сервер. Таким образом контент будет отдан строго после заголовков.

    После этого сервер уже берет то, что получилось, дописывает, если надо собственных заголовков, типа длины контента, сжимает это все, если ты указал это в настройках, и прокидывает клиенту.
    --- Добавлено ---
    Так-то у тебя под сервером может быть даже чистый C или ассемблер вместо php :)
    Главное, чтобы выполнялись CGI-договоренности. Сервер просто проксирует запрос и открывает поток на чтение. Ему совершенно плевать, кто в этот поток пишет.
     
    Rezovskij нравится это.
  9. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    всех Благодарю за разъяснения.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @Rezovskij
    про потоки почитай. типа "стандартные потоки ввода-вывода" https://ru.wikipedia.org/wiki/Стандартные_потоки тут три абзаца-то всего. Препод тебя поцалюит.

    буфер может быть, а может не быть. Можно быть уверенным только в том, что пишет в поток так или иначе.