Можно ли посылать данные одновременно методом GET и POST

Можно ли посылать данные одновременно методом GET и POST

  • Да

    Голосов: 37 69,8%
  • Нет

    Голосов: 16 30,2%

  • Всего проголосовало
    53

Фанат

oncle terrible
Команда форума
Можно ли посылать данные одновременно методом GET и POST

Возникла тут интересная проблема.
Очень хочется собрать небольшую статистику.
Пожалуйста, только отвечайте на вопрос, а обсудим чуть позже.
Вопрос звучит именно так - "можно или нельзя", а не "хорошо или плохо".
Заранее большое спасибо.
 

su1d

Старожил PHPClubа
проголосовал "да":

"можно фактически" потому, что РНР -- очень "добрый" и прощает нам кучу левых косяков. он пропарсит и ту и другую части и грамотно заполнит переменные.
точно так же "можно", например, прописывать в ХТМЛе цвета как "FFFFFF" вместо "#FFFFFF"-- броузер "добрый", он простит, хоть это и идёт вразрез со спецификациями.

"нельзя официально" -- в спецификациях такого кажется нет, и то, что это поддерживается практически всеми броузерами -- целиком и полностью лишь их добрая воля. делать этого они не обязаны.
хотя, УРЛ -- это всего лишь УРЛ -- набор знаков, поэтому воткнуть туда можно что-угодно, в т.ч. и "?" с параметрами. остальное -- уже забота server-side application.

вообще, это напоминает вечную траблу с ньюбами:
PHP:
function my_md5($str) {
  $result = mysql_query("SELECT MD5('$str')");
  $data = mysql_fetch_array($result);
  return $data[0];
}
и оно потом говорит: "Ну что вы до<beep>ались?! Ведь работает же!"
 

Фанат

oncle terrible
Команда форума
идёт вразрез со спецификациями
можно узнать, с какими?

-~{}~ 02.11.04 13:42:

su1d, а как ты ответишь на вопрос, если его сформулировать, как "возможно ли теоретически послать данные методом GET и POST одновременно"?
 

Макс

Старожил PHPClub
С точки зрения ПХП или ХТТП ?
Ту по разному к терминам придираться можно.
С точки зрения ХТТП - нельзя.
Если делаешь пост-запрос на адрес типа script.php?a=1&b=2
то метод запроса все-равно POST (броузер ведь, делая хттп-запрос, начинает с директивы POST), но ПХП создаст в массиве $_GET элементы $_GET['a'] и $_GET['b']
 

Фанат

oncle terrible
Команда форума
запросы посылаются с точки зрения браузера.
 

su1d

Старожил PHPClubа
Фанат, см. коммент Макс'а: нельзя отправить на 80-й порт: POST/GET index.php HTTP/1.1
поэтому фактически метод будет POST'ом, хоть ты тресни.

но, если считать методом GET не объявление метода в запросе ХТТП, а лишь передачу параметров в самом УРЛе после знака "?", то всё видится более менее корректным, неправда ли?
 

Макс

Старожил PHPClub
Если вопрос в том, можно ли одновременно сделать броузером
Код:
GET /talk/showthread.php?s=&postid=399387 HTTP/1.1
POST /talk/showthread.php?s=&postid=399387 HTTP/1.1
в одном запросе, то нет, нельзя.
Хотя я уже проголосовал - Да
 

Фанат

oncle terrible
Команда форума
поэтому фактически метод будет POST'ом, хоть ты тресни.
ты противоречишь большинству.
посмотри результат опроса =)
но, если считать методом GET не объявление метода в запросе ХТТП, а лишь передачу параметров в самом УРЛе после знака "?",
Вот именно. Чтобы считать, можно воспользоваться калькулятором.
А если ты работаешь с четко сформулироваными определениями протокола, то надо и называть вещи своими именами.
чтобы потом не путаться самому и не путать других.
 

su1d

Старожил PHPClubа
Автор оригинала: Фанат
можно узнать, с какими?
ну, наверное с RFC на HTTP/1.1, где объясняется понятие URI?
я сам давно там не пасся, цитировать не могу, а посему за точность не отвечаю.
 

Фанат

oncle terrible
Команда форума
Если вопрос в том, можно ли одновременно сделать броузером
GET /talk/showthread.php?s=&postid=399387 HTTP/1.1
POST /talk/showthread.php?s=&postid=399387 HTTP/1.1
в одном запросе, то нет, нельзя.
Макс, я где-то написал, что в разных? :)
 

Макс

Старожил PHPClub
Можно с этого места поподробнее? :)
Что он начинает?
текст запроса для GET :
Код:
GET /talk/showthread.php?s=&postid=399387 HTTP/1.1
Host: phpclub.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.7,ru;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
....
для POST
Код:
POST /talk/newreply.php HTTP/1.1
Host: phpclub.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.7,ru;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
....
Первой строкой идет метод. Он может быть либо ГЕТ либо ПОСТ (либо другие описаные в РФЦ) но никак не список методов
 

su1d

Старожил PHPClubа
Автор оригинала: Фанат
ты противоречишь большинству.
посмотри результат опроса =)
хех, ну ты сам попал в такую терминологическую путаницу, что теперь без бутылки тут не разобраццо =)

в общем, тебя устроит такое резюме:
- с точки зрения буквы закона ты прав: метода POST+GET нет. есть только POST, которому ты можешь скормить хитрый URI.
- с точки зрения юзера, рисующего УРЛы, ты не прав: и метод POST, и метод GET, объединённые в юзерском их понимании, работают отлично.
?
 

Фанат

oncle terrible
Команда форума
Макс, я правильно понимаю, что
POST /talk/showthread.php?s=&postid=399387 - это гет и пост одновременно, а POST /talk/showthread.php - это чисто ПОСТ?
Вычитая из первого утверждения второе, получаем, что
GET /talk/showthread.php - это обращение без метода вовсе? :)
Ведь мы исходим из предположения что метод гет - это когда у нас посылаются данные в строке запроса?
Нат данных - нет и ГЕТ? =)
 

SiMM

Новичок
С точки зрения PHP данные могут приходить одновременно и в массиве $_POST, и в массиве $_GET. Поэтому, имхо, с точки зрения PHP - можно. С точки зрения протокола - нет.
 

tony2001

TeaM PHPClub
согласен с Максом.
насколько я помню, это уже обсуждалось и пришли к тому же ответу.
 

Фанат

oncle terrible
Команда форума
su1d
С точки зрения юзера, я неправ в каждом втором топике на этом форуме.
Однако, это повод исправить точку зрения юзера, а не мою.
 

Tigr

Новичок
завидуя я вам - есть время на то чтобы лясы точить :)
 

Макс

Старожил PHPClub
Макс, я правильно понимаю, что
POST /talk/showthread.php?s=&postid=399387 - это гет и пост одновременно, а POST /talk/showthread.php - это чисто ПОСТ?
первой слово в запросе - это метод. Если первое слово POST, значит метод POST
Ведь мы исходим из предположения что метод гет - это когда у нас посылаются данные в строке запроса?
не мы, а ты. Выше я описал, где формально определяется метод. Еще выше было описаны особенности ПХП из-за которых и возникает эта терминологическая путаница
 
Сверху