Откуда берутся заголовки при вызове echo в PHP?
Я вижу код из руководства по PHP
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
писать заголовок по эхо, это будет работать?
когда просто вызываем простой код, подобный этому:
echo 'hello';
откуда заголовки http?
1 ответ
Что вы делаете в этом коде:
- Откройте сокет-соединение с удаленным HTTP-сервером (www.example.com на порту 80). Это устанавливает TCP-соединение с этим портом.
- Затем вы отправляете (через
fwrite
) HTTP-запрос по этому соединению. HTTP - это протокол поверх TCP, и вы вручную формулируете здесь заголовки протокола HTTP. - Вы тогда читаете (через
fgets
) (HTTP) ответ удаленного сервера.
Я предполагаю, что вы хотите знать, почему вы видите заголовки HTTP в этом удаленном ответе, даже если вы только делаете echo 'hello';
на удаленном сервере. Ответ заключается в том, что веб-сервер, работающий на этом сервере, обрабатывает транзакцию HTTP. Вы не обрабатываете детали входящего HTTP-запроса в PHP, а также не обрабатываете детали исходящего ответа. Веб-сервер, на котором работает PHP (вероятно, Apache), делает это.
Весь стек включает в себя TCP-соединение, которое содержит HTTP-запрос, который состоит из HTTP-заголовков и тела HTTP. На сервере TCP-соединение обычно обрабатывается базовой операционной системой, которая делает соединение доступным в качестве сокета для веб-сервера, где веб-сервер "разворачивает" HTTP-запрос для его обработки и при необходимости вызывает PHP, а затем вся цепочка идет назад для ответа.