В настоящее время, каждый, даже самый захудалый сайт, старается обеспечить взаимодействие с пользователем. Гостевые книги, комментарии под статьями, опросы, голосования и прочее — все это требует передачи информации от пользователя к серверу. Как именно это происходит? Эта статья о методах передачи данных GET и POST.
Чаще всего, для передачи данных, используются... ссылки! Да-да! Когда вы нажимаете на ссылку, часто, вы передаете данные сервер. Большинство современных веб-сайтов, активно эксплуатируют этот метод передачи информации. Этот метод называется GET. Когда мы нажимаем на ссылку, мы хотим получить (to get) какой-то документ с сервера. Поэтому метод передачи данных через ссылку и назвали get.
Метод GET удобен тем, что прост в эксплуатации. Но у него есть недостатки. Во-первых, методом GET нельзя передавать большие объемы информации, потому что данные, передаваемые этим методом входят в соств URL, длина которого ограничена.
Пример: ссылка http://dayte2.com/?u=shaman&act=state&num=9 содержит данные, передаваемые методом GET. Эти данные идут после знака вопроса.
Так как данные, передаваемые методом GET входят в соства URL документа, их может подсмотреть любой желающий. У этого есть преимущества и недостатки. Преимущество состоит в том, что можно послать ссылку вместе с данными другу. Недостаток в том, что в строке браузера отображается и ваш, только что введенный пароль. Это одна из причин, почему данные, представляющие ценность, всегда нужно передавать методом POST.
Как и метод GET, метод POST служит для передачи данных на сервер. Однако, данные, переданные таким образом, идут не в URL документа, а в теле запроса, после заголовков. Эти данные могут быть восприняты CGI-программой.
Когда данные отправляются методом POST, серверу приходит что-то вроде:
POST lines.pl HTTP/1.1
Accept: */*
Referer: http://dayte2.com/shaman.shtml
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: dayte2.com
Content-Length: 106
Connection: Keep-Alive
Cache-Control: no-cache
line=%E4%E0%ED%ED%FB%E5+%F4%EE%F0%EC%FB%2C
%EF%E5%F0%E5%E4%E0%E2%E0%E5%EC%FB%E5+%EC%E5%F2%EE%E4%EE%EC+POST
После анализа заголовков, сервер видит пустую строку, которая говорит об окончании заголовков. После нее сервер видит какие-то непонятные данные. Не долго думая, сервер решает, что эти данные нужны файлу, который вызывается, и посылает эти данные документу. Если этот документ — скрипт, то он получит эти данные так же, как получает данные с клавиатуры при работе с консолью, то есть, через STDIN.
Плюсы метода POST очевидны: можно передавать неограниченные объемы информации, причем, никто не увидит эту информацию после того, как вы ее отправили (имеется ввиду, в строке браузера).
Но есть и недостатки. Вы не сможете послать данные за друга. Кроме того, если необходимо «протащить» данные через несколько форм или страниц, то это вызовет дополнительные трудности.
Однако, и их можно обойти. Один из распространенных методов: формирование скрытых полей <input type="hidden"> с именем и значением уже пришедших данных. У этого подхода есть недостатки:
Есть так же, методы, основанные на cookie или серверных сессиях, но это — тема отдельной статьи.
Итак, мы разобрались с главными методами передачи данных (есть еще PUT, но им никто не пользуется). Для веб-мастера очень важно понимать как именно происходит передача данных и что происходит на сервере. Сейчас высокоуровневые языки программирования типа PHP, делают работу по извлечению данных автоматически, поэтому многие не понимают настоящий механизм.
Если вам понравилась статья, можете подписаться на RSS этого блога и всегда быть в курсе обновлений. А еще, вы можете подписаться на рассылку новостей блога по почте.
О том, что такое RSS и как оно облегчает жизнь, я уже писал.