Заголовок Referer и др.

Статус
В этой теме нельзя размещать новые ответы.

Линк

Guest
Если сервер отдает файл клиенту, кто же может слать заголовок?
 

korvin0

моська
Я так понимаю: перед началом загрузки файла на машину клиента сервер посылает заголовок Content-type клиенту, чтоб он мог корректно отобразить файл.

-~{}~ 16.03.04 23:32:

Отвечаю на 1-ые вопросы: проверка была выполнена с помощью telnet-клиента, а браузер шлет серверу видимо.

-~{}~ 17.03.04 08:58:

Проверка шла так:
1) в index.php на localhost'е написал "<?=$CONTENT_TYPE?>"
2) загрузил из браузера localhost и увидел, что "переменная не определена"
3) юзаю telnet.exe. Набрал "GET / HTTP/1.0\r\nContent-type: image/gif\r\n\r\n" и увидел что index.php написал "image/gif" или что-то в этом роде, т.е. переменная $CONTENT_TYPE определилась!!!
Получается, что $CONTENT_TYPE опредена, когда я (клиент) послал заголовок php(серверу)!!!
 

HEm

Сетевой бобер
korvin0
Или ты не прочитал фак как тебя просили, или шея у тебя очень длинная...
С некоторых версий php (4.1.0) нет больше самодеятельных переменных окружения, а также по умолчанию отключена возможность обращаться напрямую к переменным, переданным от пользователя, есть предопределенный набьор массивов, в которых эти данные содержатся - $_GET, $_POST, $_SERVER, $_ENV, $_COOKIE, $_REQUEST и взять эти данные ты можешь только оттуда
Эта информация есть в факе [f]register_globals[/f], ты думаешь, тебе тут 5 человек просто так сказали "иди и читай"? До коих пор ты будешь экономить свое время (хотя прочитать три кб текста по ссылке - гораздо быстрее чем три дня ждать когда тебе все разжуют и в рот положат, а потом еще и челюсти тебе подвигают) за счет чужого?
 

korvin0

моська
Да знаю я, что начиная с версии 4.1.0 в php.ini по умолчанию стоит register_globals=off. Однако у меня register_globals=on.
И даже если что-то глючит, я уже смотрел, а нет ли переменной CONTENT_TYPE во всех этих массивах. Так ее и там нет! похоже, что эта переменная вообще не пашет в php 4.3.3. на платформе Win32!
 

IntenT

SkyDiver
korvin0
переменная $CONTENT_TYPE определилась!!!
Это ты ее определил. своими руками. показать где??? - здесь:
"GET / HTTP/1.0\r\nContent-type: image/gif\r\n\r\n"
Если ты возомнил себя браузером - то у тебя наверное мания величия.
Потому что браузеры - они скромнее. И шлют саавсем другие заголовки
 

korvin0

моська
Хоршо, пусть так. Но неужели же тут не найдется ни одного, кто бы сказал: "Заголовок Content-type шлется тем-то и тем-то туда-то и туда-то. Его можно узнать через переменную такую-то и такую-то в том-то и том-то случае."?
 

Crazy

Developer
Автор оригинала: korvin0
Хоршо, пусть так. Но неужели же тут не найдется ни одного, кто бы сказал
Точнее, тебе было лень читать то, на что было указано в сообщении от 16.03.04 22:53.
 

korvin0

моська
Неправда! Я скачал себе этот manual. Насколько я понял, там написано, что Content-type посылается сервером. Но почему же тогда по умолчанию $CONTENT_TYPE не определена?
 

Crazy

Developer
Автор оригинала: korvin0
Неправда! Я скачал себе этот manual. Насколько я понял, там написано, что Content-type посылается сервером.
Я бы поверил в это, если бы ты не сказал:

Но почему же тогда по умолчанию $CONTENT_TYPE не определена?
Простой вопрос, но тебе я рекомендую подумать над ним хотя бы минут пятнадцать и только потом отвечать: откуда вдруг возьмется на СЕРВЕРЕ переменная $CONTENT_TYPE, если браузер ее не посылал? И если она вдруг откуда-то возьмется, то что в ней будет? Варианты: фамилия такущего президента Зимбабве, номер версии MySQL, RGB-коды цветов российского флага или что-то иное?

И, самое главное, как ты хотел использовать в серверном скрипте ее значение?
 

korvin0

моська
Извини, ляпнул не подумавши...
Ну, хорошо, почему по умолчанию переменная не определена, ясно. Но тогда попробуем послать заголовок Content-type сервером:
header("Content-type: text/html");
echo $CONTENT_TYPE;
И что же мы видим? А все то же - "Notice: Undefined variable: CONTENT_TYPE in J:\WWW\index.php on line 3".
Еще раз повторюсь: при посылке Content-type'а telnet-клиентом переменная $CONTENT_TYPE, как это ни странно, определяется, причем корректно.

И, самое главное, $CONTENT_TYPE я пока никак не хочу использовать, я просто разбираюсь в HTTP.
 

SiMM

Новичок
korvin0, ты что, самому себе пытаешься заголовок послать? Почему ты думаешь, что при помощи header("Content-type: text/html"); ты задаёшь переменную PHP $CONTENT_TYPE? И вообще, с чего бы это у telnet'а была какая-то переменная $CONTENT_TYPE?
 

korvin0

моська
2SiMM
1) А какая переменная, по-твоему выводит заголовок Content-type?
2) У telnet'f нет никаких переменных, но т.к. telnet-клиент - это в первую очередь HTTP-клиент, то прописав "GET / HTTP/1.0\r\nContent-type: text/html\r\n\r\n" я получу главную страницу localhost'а методом GET по протоколу HTTP 1.0. Я также отсылаю в этом запросе заголовок Content-type.

-~{}~ 18.03.04 08:30:

Так все таки кто нить скажет, как мне сделать чтобы переменная $CONTENT_TYPE хоть как нить определилась?

-~{}~ 18.03.04 08:46:

Вопрос в тему: вот в статье на http://detail.phpclub.net/article/2003-09-23 написано, что "Функции fopen, file, include и require могут открывать файлы с других сайтов по протоколам http и ftp", а также что если отправить параметром для этих функций HTTP-запрос, то он выполнится.
Только что-то У меня, например, такое: include("GET / HTTP/1.0\r\n\r\n") не пашет! В чем дело?
 

HEm

Сетевой бобер
include("GET / HTTP/1.0\r\n\r\n")
:))))) насмешил
[m]header[/m] , [m]fsockopen[/m]

Все переменные в твоем скрипте ты можешь посмотреть, сделав [m]var_dump[/m]($GLOBALS), вот и ищи там свой контент-тайп
 

IntenT

SkyDiver
Святая простота :о)))))))
korvin0
telnet-клиент - это в первую очередь HTTP-клиент
Бред. телнет не имеет к хттп никакого отношения. телнетом можно послать хттп-запрос, только и всего. Также телнетом можно послать мыло по протоколу SMTP. Так что, теперь телнет станет смтп-клиентом???

Тебе надо почитать про азы HTTP. Ты совершенно не разбираешься где запрос, а где ответ.
Когда разберешься - поймешь, что Content-Type - Это заголовок ответа. А клиент посылает запросы. (медитируй над смыслом до обеда)

Так все таки кто нить скажет, как мне сделать чтобы переменная $CONTENT_TYPE хоть как нить определилась?
Определи ее.
ТОлько , как уже отмечалось ранее, непонятно, как ты ее собираешься использовать в скрипте. Все что делает заголовок Content-Type - говорит клиенту как интерпретированть контент ответа. ТОесть это служебная инфа, необходимая клиенту, и скрипту она бесполезна.
 

Линк

Guest
1) А какая переменная, по-твоему выводит заголовок Content-type?
ЧЕЙ контент тайп?
пожалуйста, почитай на танке
ПОЙМИ как работает клиент - сервер
 

korvin0

моська
2 HEm. Цитаты из статьи http://detail.phpclub.net/article/2003-09-23:
Нерадивый или неопытный программист запросто может написать открытие файла без проверки данных:
<?php
echo implode("", file(substr($REQUEST_URI, 1)));</php>
...Поскольку в приведённом примере адрес никак не проверяется, в запрос можно вставить строку с HTTP-запросом. Если злоумышленник откроет путь
index.php?f=http%3A%2F%2Fexample.com%2F+HTTP%2F1.0%0D%0A%0D%0A
Host:+example.com%0D%0AUser-agent:+Space+Bizon%2F9%2E11%2E2001+
%28Windows+67%29%0D%0Avar1%3Dfoo%26var2%3Dbar%0D%0A%0D%0A
то скрипт выполнит HTTP-запрос:
GET example.com/ HTTP/1.0\r\n
Host: example.com\r\n
User-agent: Space Bizon/9.11.2001 (Windows 67)\r\n
var1=foo&var2=bar\r\n
\r\n
HTTP/1.0\r\n
Host: www.site1.st\r\n
User-Agent: PHP/4.1.2\r\n
\r\n

А во-вторых var_dump - очень глючная ф-ция и вместо нее я давно перешел на самодельную dump():
// Функция, вспомогательная для Dump
function TextDump($Var,$Level=0) {
if (is_array($Var)) $Type="Array[".count($Var)."]";
elseif (is_object($Var)) $Type="Object";
else $Type="";
if ($Type) {
$Level++;
echo $Type."\n";
foreach ($Var as $k=>$v) {
if(is_array($v) && $k==="GLOBALS") continue;
for ($i=0;$i<$Level;$i++) echo " ";
echo "<b>".HtmlSpecialChars($k)."</b> => ", TextDump($v,$Level);
}
}
elseif (!is_resource($Var)) echo '"'.HtmlSpecialChars($Var).'"'."\n";
else echo "<i><b>Resource</b></i>\n";

}
// Функция выводит структуру любого объекта в развернутом виде
function Dump($Var) {
echo "<pre>\n";
TextDump($Var);
echo "</pre>\n";
}

2 IntenT. Цитата из книги Дмитрия Котерова "САМОУЧИТЕЛЬ PHP 4":
Между прочим, при передаче запроса браузер "притворяется" пользователем, который запустил telnet-клиента (программу, которая, грубо говоря, умеет подключаться к заданному IP-адресу и порту, посылать по нему то, что набирается на клавиатуре, и отображать на экране поступающие "снаружи" данные) и вводит строки заголовков вручную — т. е., в текстовом виде.
И еще, раз уж ты знаешь, что telnet-клиент может отправлять http-запросы, то объяни мне, ПОЧЕМУ ЖЕ ТОГДА КОГДА Я ПОСЫЛАЮ CONTENT-TYPE: TEXT/HTML, ПЕРЕМЕННАЯ $content_type РЕЗКО ОПРЕДЕЛЯЕТСЯ?

2 Линк. Content-type документа, который я загружаю!!! А na_tanke я уже читал 4 раза!

-~{}~ 18.03.04 14:39:

Забыл сказать, что в $GLOBALS ввобще нету переменной content_type!
 

SiMM

Новичок
korvin0, мало читал - продолжай в том же духе - не оставляй надежды - возможно, скоро поймёшь, что к чему :)
ПОЧЕМУ ЖЕ ТОГДА КОГДА Я ПОСЫЛАЮ CONTENT-TYPE: TEXT/HTML, ПЕРЕМЕННАЯ $content_type РЕЗКО ОПРЕДЕЛЯЕТСЯ?
Кем определяется? Да, в телнете ты видишь некий заголовок - но телнету на него глубоко положить и ни о какой переменной $CONTENT_TYPE он даже не догадывается, он понятия не имеет, что видит, и не покажет тебе, к примеру, тело документа в виде картинки, если в заголовке будет указан соответствующий тип - он лишь показывает то, что получил в ответ на свой запрос - и ничего более.
 

IntenT

SkyDiver
korvin0
Цитата из книги Дмитрия Котерова "САМОУЧИТЕЛЬ PHP 4":
при передаче запроса браузер "притворяется" пользователем, который запустил telnet-клиента
Хорошо, всетаки, что я никогда не читал таких книг..

Скорее пользователь за телнетом, притворяется браузером.

Есть только одно применение Content-Type для браузера - отправка форм методом POST.
Вынужден заметить, что браузер посылает этот заголовок.
Это делается, чтобы скрипт смог проинтерпретировать контент формы.
Все как-то про это забыли.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху