HTTP 1.1 Запрос с Content-Type: multipart/form-data;

Бочонок

http://frontender.info
HTTP 1.1 Запрос с Content-Type: multipart/form-data;

Доброго времени суток.

Пытаюсь досконально разобратся в протоколе HTTP 1.1.
Возникли пара вопросов:
1. Все заголовки регистронезависимы, верно ?
2. Если у нас Content-Type: multipart/form-data;, то разделитель мы выбираем произвольный ?
PHP:
boundary="somedelimiter"
И далее после двойного перевода строки (окончания заголовков) передаем переменные в таком виде:
Код:
--somedelimiter\r\n
Content-Disposition: form-data; name="var1"\r\n
\r\n
value 1\r\n
--somedelimiter\\r\\n
Content-Disposition: form-data; name="var2"\r\n
\r\n
value 2\r\n
--somedelimiter--
?
3. из http://www.ietf.org/rfc/rfc2388.txt я не смог понять:
надо ставить после --somedelimiter-- "\r\n" или нет...

4. когда мы считаем Content-Length мы считаем насчиная с --somedelimiter или учитываем \r\n или \r\n\r\n перед ней ?

Подскажите пожалуста !
 

antonio

Moderator
Команда форума
Нет Content-Length начинает считаться после двойного перевода строки, что сигнализирует об окончании заголовка.

--somedelimiyer является границей и не является данными и не входит в длину блока данных, и вобще --somedelimiter из оперы MIME формата и имеет слабое отношение к POST запросу
 

Бочонок

http://frontender.info
1. --somedelimiter из оперы MIME формата и имеет слабое отношение к POST запросу

В общем то да, но он используется при передаче данных, если
<form ... enctype='multipart/form-data'>

2. --somedelimiyer является границей и не является данными и не входит в длину блока данных,

столкнулся со странностью, посылаю запрос, приведенный ниже, и судя по Content-Length, эти самые разделители в нее входят...
Что я неверно понял, обьясните пожалуста...

Код:
POST /post_send.php HTTP/1.1
Host: news
Accept: */*
Content-Type: multipart/form-data; boundary=---------------------------7d6fa1070928
Content-Length: 149
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7d6fa1070928
Content-Disposition: form-data; name="fragment"

some_var
-----------------------------7d6fa1070928--
3. Немогу понять после завершающего разделителя "-----------------------------7d6fa1070928--" надо слать \r\n ?

-~{}~ 21.09.06 14:50:

Количество байт в

PHP:
-----------------------------7d6fa1070928
Content-Disposition: form-data; name="fragment"

some_var
-----------------------------7d6fa1070928--
147.
и где потерялись 2 байта ?

ЗЫ. запрос просто из формы сделан.
 

Popoff

popoff.donetsk.ua
Все заголовки - регистронезависимые, но этим свойством лучше не пользоваться.

RFC по multipart/form-data находится здесь:
http://rfc.net/rfc1867.html

--somedelimiyer учитывается в Content-Length, так как Content-Length содержит в себе длину не "блока данных" (я, кстати, не знаю, что означает "блок данных"), а длину всего тела POST-запроса, включая все разделители.

Вот на этой странице:
http://phpfaq.ru/na_tanke#headers
написано, как можно посмотреть обмен загаловками в браузере. Просмотрите, как шлёт запрос браузер и сделайте себе так же.
 

Бочонок

http://frontender.info
RFC по multipart/form-data находится здесь: - спасибо.

http://phpfaq.ru/na_tanke#headers - естественно я смотрю что оно шлет, и стараюсь повторить и еще и согласовать это все со стандартом.

но например откуда берутся еще 2 байта в примере приведенном выше ? (заголовки получал IE HTTP Analyzer)
Неясно так же шлется ли в конце \r\n...
 

Popoff

popoff.donetsk.ua
После последнего
-----------------------------7d6fa1070928--
шлются
\r\n
и они тоже учитываеются в длине.

Пример реализации запроса средствами РНР можно найти в комментариях пользователей в документации по РНР. Кажется, к функции fsockopen, а может к какой-нибудь другой. По крайней мере, когда я разбирался, за основу брал пример оттуда.
 

Бочонок

http://frontender.info
спасибо большое.
полез разбиратся дяльше.
хотя \r\n это 4 байта вообще то...
 

Popoff

popoff.donetsk.ua
хотя \r\n это 4 байта вообще то
ха-ха-ха =))

По сведениям, приведённым в энциклопедии наших заблуждений, буквально до 16 века, с лёгкой руки Гая Плиния Старшего буквально на рубеже нашей эры, люди были уверены, что у мухи 4 ноги ;) НИКТО почти за 1500 лет НЕ ДОГАДАЛСЯ ПРОВЕРИТЬ. Только в 16 веке кто-то поймал какую-то муху, посчитал ноги, обнаружил, что их 6 и решил, что это какая-то неправильная муха. Тогда стали ловить всех подряд мух и выяснили, что, видимо, мухи мутировали за такой длинный срок.

-~{}~ 24.09.06 02:12:

хотя \r\n это 4 байта вообще то...
А хотя, да, действительно... 4 (четыре) байта... %-)

Просто ты набери:
echo strlen("\n\r");
и ты поймёшь, что вызвало мой смех. Я никогда не догадался бы посчитать те байты, которые посчитал ты. Я подумал, что 4 байта - это какое-то непонятное предубеждение, которое тебе кто-то подсказал.

Эти четыре байта - это не те байты, что шлются, а те, что ты вводишь в своей программе. Шлётся там только два байта - символ перевода каретки, с десятичным кодом 10, код которого в РНР записывается как "\r" и символ конца строки, с десятичным кодом 13, код которого в РНР записывается как "\n". :)

-~{}~ 24.09.06 02:21:

хотя \r\n это 4 байта вообще то...
Вопрос, построенный на основе предложенного Вами утверждения, думаю, является достойным дополнением к моему списку странных вопросов.
 
Сверху