2014-11-11 6 views
1

Я вижу, пришел код из 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 от?

ответ

0

Что вы делаете в этом коде:

  1. Открыть разъем подключения к удаленному серверу HTTP (www.example.com на порт 80). Это устанавливает TCP-соединение с этим портом.
  2. Вы затем пришлите (через fwrite) HTTP-запрос по этому соединению. HTTP - это протокол поверх TCP, и вы вручную формулируете заголовки протокола HTTP здесь.
  3. Вы тогда читаете (через fgets) ответ (HTTP) удаленного сервера.

Я угадывание, что вы хотите знать, почему вы видите HTTP заголовки в этом отдаленном ответ, даже если вы только делаете echo 'hello'; на удаленном сервере. Ответ заключается в том, что веб-сервер, работающий на этом сервере, обрабатывает транзакцию HTTP. Вы не обрабатываете какие-либо данные о входящем HTTP-запросе в PHP, а также не обрабатываете какие-либо подробности исходящего ответа. Веб-сервер, на котором работает PHP (вероятно, Apache), делает это.

Весь стек включает TCP-соединение, которое содержит HTTP-запрос, который состоит из HTTP-заголовков и тела HTTP. На сервере TCP-соединение обычно обрабатывается базовой операционной системой, что делает соединение доступным как сокет для веб-сервера, где веб-сервер «разворачивает» HTTP-запрос для его обработки и при необходимости вызывает PHP, а затем вся цепочка возвращается назад для ответа.