Сайт о телевидении

Сайт о телевидении

» » Все о мужчинах онлайн post asp method. Типы HTTP-запросов и философия REST. Постер к фильму "Империя чувств"

Все о мужчинах онлайн post asp method. Типы HTTP-запросов и философия REST. Постер к фильму "Империя чувств"

Видя в кино совокупляющихся людей, мы иной раз отмечаем: надо же, как хорошо сыграли! Прямо хоть «Оскар» давай! О том, что секс может быть не симулирован, никто даже не задумывается - мы ведь знаем, какое огромное количество "посторонних зрителей" обычно присутствует на съемочной площадке, да и вообще, если все взаправду, то это уже по-другому называется и на полки обычных видеомагазинов не попадает. Но из каждого правила бывают исключения, и в редких случаях реальные соития все же проникают на большой экран. Мы вспомнили наиболее примечательные примеры из этого ряда.

Постер к фильму "Свит Свитбэк: Песня мерзавца"

Инди-режиссер Мелвин Ван Пиблз точно знал, что ему нужно, когда писал сценарий, снимал и монтировал фильм о злоключениях чернокожей секс-машины по имени Свит Свитбэк. Главному герою приходится нарушить множество существовавших в начале 70-х жанровых табу: убивать собак и полицейских, мочиться и, конечно, много заниматься сексом, в том числе межрасовым. Подписать на такое кого-то было непросто, и ни на каскадера, ни даже на дублера у Мелвина денег не имелось, потому режиссер сам исполнил главную роль, мужественно проведя перед камерой ряд половых актов с едва знакомыми людьми. Подтверждением того, что все было взаправду, стала подхваченная им в процессе съемок гонорея, на лечение которой Ван Пиблз даже умудрился выбить энную сумму из Гильдии кинорежиссеров - правда, в итоге и эти деньги ушли на производство картины. Результат, как оказалось, стоил того: «Песня мерзавца» стала одним из самых прибыльных и обсуждаемых фильмов 1971 года, попутно породив целый новый поджанр - «блэксплотейшн».

Постер к фильму "Розовые фламинго"

Фильм знаменитого кинопровокатора Джона Уотерса о девиантных развлечениях двух семеек слабоумных фриков строго не рекомендуется для просмотра любителям «клубнички»: ваши нервы могут не выдержать увиденного. Поскольку режиссер, по собственному признанию, добивался от аудитории не оваций, а рвотной реакции (на премьере зрителям даже раздавали гигиенические пакеты), то и методы у него соответствующие: секс с участием раздавленных кур, дефекация и мастурбация, поедание одним из персонажей собачьего дерьма, минет матери собственному сыну. То, что «мать» играл знаменитый трансвестит Дивайн (настоящее имя Харрис Глен Милстед), приятности картине не доставляет; прочем, при всей своей непотребности, сексуальная составляющая все же несколько меркнет на фоне какашек, которые Дивайн, согласно его интервью разных лет, то ли ел, то ли не ел. В итоге режиссер положил конец кривотолкам, ответственно заявив, что ввиду практически нулевого бюджета на реквизит и дублеров у него финансов не имелось. Так что все было «по-чесноку» (за исключениям разве что каннибализма), и несчастные куры, увы, тоже умерли по-настоящему.

Кадр из фильма "Разыскивающий"


Триллер Уильяма Фридкина о серийном убийце, расчленяющем геев, запомнился зрителям не только участием Аль Пачино , но и сценами однополого секса, запечатленного камерой в многочисленных гей-клубах. «Все было по-настоящему, - признавался позже режиссер “Изгоняющего дьявола ”, рассказывая, что изначально нью-йоркские геи, с которыми он заводил знакомства в спецбарах, помогли ему со сбором материала для ленты, а потом они же в ней и сыграли. - В моем фильме нет членов Гильдии актеров массовки. Мы заплатили этим ребятам как статистам, но на самом деле они просто тусовались в тех местах, где мы снимали, и делали вот это самое». Студии, профинансировавшие фильм, остались не в восторге от результата, которому светил порнографический рейтинг «Х», и заставили его чудовищно изрезать, оставив на полу монтажной большую часть «клубнички». Но лента все равно провалилась в прокате - считается, что именно она забила последний гвоздь в гроб эпохи Нового Голливуда, дававшей многим независимым режиссерам деньги на съемки фильмов «не для всех». Вырезанные сцены позже, к слову, были восстановлены Джеймсом Франко в документалке «Интерьер. Кожаный бар» - и правильно, не зря же Фридкин старался, в самом деле.

Постер к фильму "Империя чувств"


История японской проститутки 30-х годов, несмотря на шокирующую откровенность сопровождающих ее сексуальных сцен, даже в родной Японии стоившую ленте цензурных правок, а режиссеру Нагиса Осима - судебного обвинения, в целом все же не имела таких серьезных проблем с прокатом, как последующие образчики эротического жанра. Ей удалось заработать и культовый статус, подкрепленный несомненными художественными достоинствами, и овацию в Каннах. К 1990 году «Империя чувств» сумела проникнуть даже в советские кинотеатры (пусть и с грифом «детям до шестнадцати просмотр запрещен»), снеся неискушенным гражданам крышу демонстрацией фелляции и прочих недвусмысленных проникновений и вызвав в СМИ возмущение «актами подлинного совокупления без всякой вуали». Так советский человек понял: в СССР секса, может, и нет, но в Японии он точно есть. К слову, сцена кастрации, присутствующая в «Империи чувств», все же не была настоящей - даже для японских кинематографистов, не особенно обременяющих себя вопросами нравственности, это было бы слишком.

Постер к фильму "Калигула"


Те, кто не знаком с историей создания «Калигулы», удивляются, как это Тинто Брасс умудрился заманить в порнофильм таких актеров, как Малкольм МакДауэлл , Джон Гилгуд , Питер О’Тул , Хелен Миррен . Ларчик открывается просто: несмотря на репутацию Брасса, лента не задумывалась им как порнографическая - любитель небритых подмышек действительно планировал сделать историческое полотно о кровавом римском императоре, и весь снятый им секс был симулирован. Но после того, как спонсор, издатель порножурнала «Пентхаус» Боб Гуччионе, стал требовать «тру хардкора» (статус «взрослого кино» позволил бы увеличить цену кинобилетов), Брасс заартачился и был уволен, а Гуччионе сам сел в режиссерское кресло и доснял шесть минут чистой порнографии, которая была довольно грубо вмонтирована в уже готовое кино без предупреждения остальных участников проекта. Нужно ли говорить о том, как громко стукнулись об пол челюсти исполнителей главных ролей на премьере.

Постер к фильму "Кен Парк"


После скандальных, но все-таки не порнографических «Деток » о сексуальной жизни подростков режиссер Ларри Кларк не успокоился и снял «Кен Парк» - снова про подростков, - в котором заставил своих героев зайти на территорию куннилингуса, минета, мастурбации, группового секса и других сложно симулируемых вещей, показанных крупным планом. Учитывая достаточно юный возраст актеров, которым пришлось участвовать в действиях сексуального характера, фильм вызвал нешуточное бурление в прессе и был запрещен в ряде стран, в том числе в США. Аргументы режиссера, уверявшего, что всем участникам проекта уже исполнилось 18, то есть они с полным правом могут сниматься в любом хардкорном порно, мало что изменили в глазах большей части консервативного общества, рассудившего: может, конечно, подростки и занимаются сексом, но показывать это в кинотеатрах все-таки не надо. А то вдруг еще зрители что-то новое узнают…

Постер к фильму "Бурый кролик"


Никто бы сегодня не помнил этого фильма, если бы не Хлои Севиньи в главной женской роли, которую центральный актер и по совместительству режиссер ленты Винсент Галло (он же продюсер и автор сценария) уломал на крупноплановую фелляцию себе, любимому. В Каннах «Бурого кролика» так освистали, что Галло пообещал завязать с режиссурой, но, впрочем, слова не сдержал. Карьера Севиньи тоже предсказуемо хрустнула - следующие лет 10 ни одно ее интервью не обходилось без покаянных речей о том, что она напрасно доверилась чутью режиссера, обещавшего снять пронзительный фестивальный хит. Сегодня, в эпоху взлома айфонов, такими видео уже никого удивишь, но в начале нулевых подобные скандалы были еще в диковинку, так что девушке от общества здорово досталось. Тот факт, что по сюжету ее героиня была наркоманкой, да и вообще скандальный минет случился лишь в воспаленной фантазии персонажа Галло, мало что изменил: на пленке-то все было более чем реальным, в чем и поспешили убедиться полчища зрителей, следующие лет десять активно качавшие скандальную ленту из Сети лишь ради просмотра той самой сцены.

Постер к фильму "9 песен"


Есть мнение, что моду на фестивальные фильмы, в которых обилие секса прикрывает недостатки режиссуры и актерской игры, заложила музыкальная эротическая драма «9 песен» Майкла Уинтерботтома , содержание которой вкратце можно описать словами «ученый и студентка занимаются сексом, в промежутках - концертные номера». Несимулированные половые контакты между героями Кирана О"Брайена и Марго Стилли включали полный джентльменский набор: классический секс, оральный, эякуляция и прочие неприкрытые атрибуты порножанра. Актерам дали возможность «порепетировать» перед съемками (часть этого материала позже вошла в фильм), после чего они дали согласие на основные съемки, но, правда, когда камера была выключена, О’Брайен и Стилли нисколько друг другом не интересовались. Сношения, показанные в фильме, большинством критиков были признаны «неаппетитными», а сюжет - отсутствующим (у ленты и правда не было никакого сценария). Кроме того, британский парламент гневно осудил режиссера, решившего потроллить общественные вкусы сакраментальным вопросом «почему в кино нельзя показывать занятия любовью, ведь это так же естественно, как принимать пищу?», а фотомодель, сыгравшая главную роль, перед релизом попросила убрать ее имя из титров. Позже, правда, Марго перестала скрываться: какими бы слабыми во всех планах ни оказались «9 песен», для нее они стали стартом довольно успешной актерской карьеры.

Постер к фильму "Трахни меня"


Наивно думать, что реального секса от актеров могут требовать только режиссеры-мужчины. Криминальный триллер «Трахни меня», поставленный француженками Вирджини Депант и Корали Трин Ти , с самого начала планировался ими как гремучий сплав жанрового кино в духе «Прирожденных убийц » и «Тельмы и Луизы » со сценами жесткого порева (благо у второй постановщицы имелся большой опыт в этом плане, причем по обе стороны камеры). На роли главных героинь - проститутки Надин и порноактрисы Ману - были выбраны настоящие актрисы категории «икс», что позволило им правдиво отыграть порносцены, которыми нашпигована лента, да и с драматической составляющей справиться достаточно неплохо. Правда, сама история об озлобленных на мужчин девушках с трудным прошлым, которые в поисках мести трахают и убивают всех, кто им попадается на пути, была воспринята зрителем слишком жестокой и феминистичной, а героини получились по-настоящему отталкивающими. Как следствие, лента была запрещена к прокату в нескольких странах и имела проблемы с цензурой даже в либеральной Франции. Впрочем, было бы странно, если бы вышло как-то по-другому.

Постер к фильму "Необратимость"


Мы знаем, о чем вы сейчас подумали. Но нет, спешим разочаровать: знаменитая десятиминутная сцена анального изнасилования Моники Белуччи в подземном переходе, сделавшая карьеру молодому французскому режиссеру Гаспару Ноэ , является имитацией от первого до последнего кадра (как, к слову, и анальная пенетрация в «Последнем танго в Париже », раз уж зашла речь о знаменитых шоковых киномоментах). Зато в фильме есть другие несымитированные моменты, такие как фелляция и мастурбация. Ноэ и до и после увлекался порносценами - хардкорные моменты можно найти чуть ли не в каждом его фильме, начиная с полнометражного дебюта «Один против всех » и заканчивая короткометражками разных лет, а во «Входе в пустоту » он изощрился и вовсе показал половой акт изнутри, правда, то была уже фотореалистичная компьютерная анимация. К слову, эротическая сцена, в которой Белуччи занята с Венсаном Касселем , тоже снята «натурально», поскольку во время съемок актеры пребывали друг с другом в счастливом браке. Но в данном случае Ноэ пощадил чувства супругов и решил обойтись легкой эротикой.

Постер к фильму "Клуб «Shortbus»"


В своем ромкоме о нью-йоркском клубе любителей секса Джон Кэмерон Митчелл умудрился показать целый спектр «взрослых удовольствий» - от мастурбации и группового секса до, как бы это сказать покорректней, аутофелляции. О том, что все оргазмы в «Клубе Shortbus» настоящие, постановщик на премьере мог бы и не сообщать: все и так видно невооруженным глазом. «Я не считаю свой фильм порнографическим, - говорил он позже. - Так как порнография характеризуется отсутствием художественных задач, ее цель - возбудить. А я не думаю, что у кого-либо возникнет эрекция во время просмотра моего фильма». Порно или нет - на эту тему можно долго спорить, но подобную раскованность в кадре вряд ли могли себе позволить знаменитости, потому актеры набирались по объявлению: Митчелл отсмотрел пять сотен видеозаявок из разных стран, прежде чем нашел достаточно киногеничных храбрецов, готовых отбросить ложный стыд. Чтобы тем было проще раскрепоститься, на съемках откровенных сцен он и оператор работали обнаженными. Несмотря на то что фильм был снят красиво и действительно мог похвастать наличием довольно занимательного сюжета, консервативную общественность несколько ошарашил вываленный на нее калейдоскоп сексуальной разнузданности, так что исполнительница одной из главных ролей, канадская радиоведущая Ли Сук-Йин, после выхода «Клуба Shortbus» в прокат едва не лишилась работы. К счастью, Фрэнсису Форду Копполе лента понравилась, и его заступничество решило вопрос.

Постер к фильму "Романс Х"

Француженка Катрин Брейя еще в дебютной драме «Настоящая девчонка », запрещенной везде, где только можно, и провалявшейся более 20 лет на полке, показала, какие затейливые вещи может страдающая от скуки девушка-подросток творить со своей вагиной. В «Романсе Х» она решила проследить, на что готова женщина, с которой отказывается спать любимый мужчина. На помощь был призван знаменитый порноактер Рокко Сиффреди, помогший героине раскрепоститься до известных пределов - критики насчитали мастурбацию, минет, половой акт, эякуляцию и прочие кунштюки вроде садо-мазо; все это, как можно понять, без какой-либо цензуры, страха и упрека. Цензура началась позже, когда некоторые страны затруднились с определением возрастного рейтинга ленты, так что какой-то период времени зрителю предлагалось выбирать между несколькими версиями разной степени порезанности. В итоге оригинальная версия была показана в ночном телеэфире сразу в нескольких странах, и аудитория успокоилась: ну, Рокко Сиффреди немножко в кадре эякулирует, ну да… То есть ничего такого революционного. Было бы куда апокалиптичней, если бы он вместо своей обычной работы шекспировские монологи с придыханием читал.

Постер к фильму "Интим"


Он - бармен, она - театральная актриса. У них есть маленький секрет, о котором не стоит знать окружающим. Но чем дальше длится их тайная связь, тем меньше устраивают одинокого бармена правила игры… «Интим» Патриса Шеро зацепил глаз зрителя не сколько даже натуралистичностью показа встреч двух людей, у которых, кроме быстрого секса по средам, нет ничего общего, сколько отталкивающим характером этого натурализма: ни грима, ни косметики, добавьте к этому волосатые ноги, прыщи, неидеальность фигур, и вам вряд ли захочется пересматривать ленту, единственной целью которой, похоже, является раскрытие эстетики некрасивого. Впрочем, невзирая на все сюжетные провисания, крупноплановый минет в исполнении новозеландки Кэрри Фокс Уиллема Дефо с Шарлоттой Генсбур в «Антихристе» был вполне реальным. А Шиа ЛаБаф , голову которого, как клялся пресс-релиз «Нимфоманки», приклеили на компьютере к чужому совокупляющемуся торсу, после премьеры признался в интервью, что ничего такого на съемочной площадке не симулировал. В общем, можно спорить, кому конкретно принадлежали причиндалы, но как минимум то, что во все всех вышеперечисленных лентах возбужденные половые органы вступали в неиллюзорный контакт, сомнению не подлежит.

Оставайтесь с нами на связи и получайте свежие рецензии, подборки и новости о кино первыми!

Последнее обновление: 31.10.2015

Методы действий (action methods) представляют такие методы контроллера, которые обрабатывают запросы по определенному URL. Например, возьмем проект из предыдущей главы. В нем был определен следующий контроллер:

Public class HomeController: Controller { BookContext db = new BookContext(); public ActionResult Index() { IEnumerable books = db.Books; ViewBag.Books = books; return View(); } public ActionResult Buy(int id) { ViewBag.BookId = id; return View(); } public string Buy(Purchase purchase) { purchase.Date = DateTime.Now; db.Purchases.Add(purchase); db.SaveChanges(); return "Спасибо, " + purchase.Person + ", за покупку!"; } }

Здесь методы Index и Buy являются методами действий или просто действиями контроллера. При получении запроса типа /Home/Index контроллер передает обработку запроса действию Index.

Так как запросы бывают разных типов, например, GET и POST, фреймворк ASP.NET MVC позволяет определить тип обрабатываемого запроса для действия, применив к нему соответствующий атрибут: , , или . Так, действие Buy разбито на два метода, по одному для каждого типа запроса.

Однако не все методы контроллера являются методами действий. Методы действий всегда имеют модификатор public . Закрытых приватных методов действий не бывает. Но контроллер может также включать и обычные методы, которые могут использоваться в вспомогательных целях. Например,

Public string Buy(Purchase purchase) { purchase.Date = getToday(); db.Purchases.Add(purchase); db.SaveChanges(); return "Спасибо, " + purchase.Person + ", за покупку!"; } private DateTime getToday() { return DateTime.Now; }

Соответственно мы не можем отправить из браузера запрос Home/getToday/ , потому что метод getToday не является методом действия.

Передача данных в контроллеры и параметры

В приложении из предыдущей главы метод Buy использовал параметр purchase. Так как данный метод обрабатывает POST-запросы, то мы можем отправить ему следующую форму:

Введите свое имя

Введите адрес:

Значение атрибута name у всех полей на этой форме соответствует названию свойства модели, поэтому система автоматически свяжет значения полей с соответствующими свойствами. А в методе Buy весь этот набор свойств превратится в модель Purchase.

Кроме POST-запросов у нас есть также GET-запросы, при которых все параметры передаются в строке запроса. Например, вторая версия метода Buy в качестве параметра принимает значение типа int: public ActionResult Buy(int id) . Стандартный get-запрос принимает примерно следующую форму: название_ресурса?параметр1=значение1&параметр2=значение2 . То есть запрос к данному методу мог бы выглядеть так: Home/Buy?id=2 . Название параметров метода должно совпадать с названием параметров в строке запроса. Благодаря этому система сможет их автоматически связать. А в самом методе мы сможем получить этот параметр и использовать его по своему усмотрению.

Кроме того, система маршрутизации позволяет создавать маршруты. Например, по умолчанию в проекте MVC определяется следующий маршрут: Контроллер/Метод/id . Последний параметр является опциональным. И благодаря этому мы можем передать параметр id и так: Home/Buy/2

Для примера определим действие, которое будет подсчитывать площадь треугольника:

Public string Square(int a, int h) { double s = a*h/2.0; return "

"; }

В этом случае мы можем обратиться к действию, набрав в адресной строке Home/Square?a=10&h=3 , и приложение выдало бы нам нужный результат.

Мы также можем задать для параметров значения по умолчанию:

Public string Square(int a=10, int h=3) { double s = a*h/2.0; return "

Площадь треугольника с основанием " + a + " и высотой " + h + " равна " + s + "

"; }

В этом случае при запросе страницы мы можем указать только один параметр или вообще не указывать(Home/Square?h=5 ).

Получение данных из контекста запроса

Кроме того, мы можем получить параметры, да и не только параметры, но и другие данные, связанные с запросом, из объектов контекста запроса. Нам доступны следующие объекты контекста: Request , Response , RoutedData , HttpContext и Server .

Объект Request содержит коллекцию Params, которая хранит все параметры, переданные в запросы. И мы их можем получить:

Public string Square() { int a = Int32.Parse(Request.Params["a"]); int h = Int32.Parse(Request.Params["h"]); double s = a*h/2.0; return "

Я хочу использовать ASP для генерации кода в настольном приложении C#.

Для этого я создал простой хост (полученный из System.MarshalByRefObject), который обрабатывает System.Web.Hosting.SimpleWorkerRequest через HttpRuntime.ProcessRequest. Это обрабатывает сценарий ASPX, указанный входящим запросом (используя System.Net.HttpListener для ожидания запросов).

Клиентская часть представлена ​​System.ComponentModel.BackgroundWorker, которая строит System.Net.HttpWebRequest и получает ответ от сервера.

упрощенная версия моего клиента часть кода выглядит следующим образом:

Private void SendRequest(object sender, DoWorkEventArgs e) { // create request with GET parameter var uri = "http://localhost:9876/test.aspx?getTest=321"; var request = (HttpWebRequest)WebRequest.Create(uri); // append POST parameter request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var postData = Encoding.Default.GetBytes("postTest=654"); var postDataStream = request.GetRequestStream(); postDataStream.Write(postData, 0, postData.Length); // send request, wait for response and store/print content using (var response = (HttpWebResponse)request.GetResponse()) { using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { _processsedContent = reader.ReadToEnd(); Debug.Print(_processsedContent); } } }

Мой сервер-часть-код выглядит следующим образом (без обработки исключений и т.д.):

Public void ProcessRequests() { // HttpListener at http://localhost:9876/ var listener = SetupListener(); // SimpleHost created by ApplicationHost.CreateApplicationHost var host = SetupHost(); while (_running) { var context = listener.GetContext(); using (var writer = new StreamWriter(context.Response.OutputStream)) { // process ASP script and send response back to client host.ProcessRequest(GetPage(context), GetQuery(context), writer); } context.Response.Close(); } }

Пока все это прекрасно работает, пока я просто использую параметры GET . Но когда дело доходит до получения POST-данных в моем сценарии ASPX, я сталкиваюсь с проблемами. Для тестирования я использую следующий сценарий:

// GET parameters are working: var getTest = Request.QueryString["getTest"]; Response.Write("getTest: " + getTest); // prints "getTest: 321" // don"t know how to access POST parameters: var postTest1 = Request.Form["postTest"]; // Request.Form is empty?! Response.Write("postTest1: " + postTest1); // so this prints "postTest1: " var postTest2 = Request.Params["postTest"]; // Request.Params is empty?! Response.Write("postTest2: " + postTest2); // so this prints "postTest2: "

кажется, что System.Web.HttpRequest объект, который я имею дело с в ASP не содержит никакой информации о моем параметре POST «посттестовый». Я проверил его в режиме отладки, и ни один из участников не содержал ни имени параметра «postTest», ни значения параметра «654». Я также попробовал метод BinaryRead Request, но, к сожалению, он пуст. Это соответствует Request.InputStream == null и Request.ContentLength == 0. И чтобы сделать вещи действительно запутывающими, член Request.HttpMethod установлен в «GET» ?!

Чтобы изолировать проблему, я проверил код, используя скрипт PHP вместо сценария ASPX. Это очень просто:

Print_r($_GET); // prints all GET variables print_r($_POST); // prints all POST variables

И результат:

Array ( => 321) Array ( => 654)

Так со сценарием PHP это работает, я могу получить доступ к данным POST. Почему сценарий ASPX не работает? Что я делаю неправильно? Есть ли специальный объект или метод в объекте Response?

Может ли кто-нибудь дать подсказку или даже знать, как это решить? Заранее спасибо.

Этот пост - ответ на вопрос, заданный в комментарии к одной из моих статей.

В статье я хочу рассказать, что же из себя представляют HTTP-методы GET/POST/PUT/DELETE и другие, для чего они были придуманы и как их использовать в соответствии с REST.

HTTP

Итак, что же представляет из себя один из основных протоколов интернета? Педантов отправлю к RFC2616 , а остальным расскажу по-человечески:)

Этот протокол описывает взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка.

Стартовые строки для запроса и ответа имеют различный формат - нам интересна только стартовая строка запроса, которая выглядит так:

METHOD URI HTTP/VERSION ,

Где METHOD - это как раз метод HTTP-запроса, URI - идентификатор ресурса, VERSION - версия протокола (на данный момент актуальна версия 1.1).

Заголовки - это набор пар имя-значение, разделенных двоеточием. В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее.

Тело сообщения - это, собственно, передаваемые данные. В ответе передаваемыми данными, как правило, является html-страница, которую запросил браузер, а в запросе, например, в теле сообщения передается содержимое файлов, загружаемых на сервер. Но как правило, тело сообщения в запросе вообще отсутствует.

Пример HTTP-взаимодействия

Рассмотрим пример.

Запрос:
GET /index.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/html Connection: close
Первая строка - это строка запроса, остальные - заголовки; тело сообщения отсутствует

Ответ:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... САМА HTML-СТРАНИЦА...

Ресурсы и методы

Вернемся к стартовой строке запроса и вспомним, что в ней присутствует такой параметр, как URI. Это расшифровывается, как Uniform Resource Identifier - единообразный идентификатор ресурса. Ресурс - это, как правило, файл на сервере (пример URI в данном случае "/styles.css"), но вообще ресурсом может являться и какой-либо абстрактный объект ("/blogs/webdev/" - указывает на блок «Веб-разработка», а не на конкретный файл).

Тип HTTP-запроса (также называемый HTTP-метод) указывает серверу на то, какое действие мы хотим произвести с ресурсом. Изначально (в начале 90-х) предполагалось, что клиент может хотеть от ресурса только одно - получить его, однако сейчас по протоколу HTTP можно создавать посты, редактировать профиль, удалять сообщения и многое другое. И эти действия сложно объединить термином «получение».

Для разграничения действий с ресурсами на уровне HTTP-методов и были придуманы следующие варианты:

  • GET - получение ресурса
  • POST - создание ресурса
  • PUT - обновление ресурса
  • DELETE - удаление ресурса
Обратите внимание на тот факт, что спецификация HTTP не обязывает сервер понимать все методы (которых на самом деле гораздо больше, чем 4) - обязателен только GET, а также не указывает серверу, что он должен делать при получении запроса с тем или иным методом. А это значит, что сервер в ответ на запрос DELETE /index.php HTTP/1.1 не обязан удалять страницу index.php на сервере, так же как на запрос GET /index.php HTTP/1.1 не обязан возвращать вам страницу index.php, он может ее удалять, например:)

В игру вступает REST

REST (REpresentational State Transfer) - это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) - одним из разработчиков протокола HTTP - в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP - его можно применять и в других сетях с другими протоколами. REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол - это HTTP-метод.

REST предлагает отказаться от использования одинаковых URI для разных ресурсов (то есть адреса двух разных статей вроде /index.php?article_id=10 и /index.php?article_id=20 - это не REST-way) и использовать разные HTTP-методы для разных действий. То есть веб-приложение, написанное с использованием REST подхода будет удалять ресурс при обращении к нему с HTTP-методом DELETE (разумеется, это не значит, что надо давать возможность удалить всё и вся, но любой запрос на удаление в приложении должен использовать HTTP-метод DELETE).

REST дает программистам возможность писать стандартизованные и чуть более красивые веб-приложения, чем раньше. Используя REST, URI для добавления нового юзера будет не /user.php?action=create (метод GET/POST), а просто /user.php (метод строго POST).

В итоге, совместив имеющуюся спецификацию HTTP и REST-подход наконец-то обретают смысл различные HTTP-методы. GET - возвращает ресурс, POST - создает новый, PUT - обновляет существующий, DELETE - удаляет.

Проблемы?

Да, есть небольшая проблема с применением REST на практике. Проблема эта называется HTML.

PUT/DELETE запросы можно отправлять посредством XMLHttpRequest, посредством обращения к серверу «вручную» (скажем, через curl или даже через telnet), но нельзя сделать HTML-форму, отправляющую полноценный PUT/DELETE-запрос.

Дело в том, спецификация HTML не позволяет создавать формы, отправляющие данные иначе, чем через GET или POST. Поэтому для нормальной работы с другими методами приходится имитировать их искусственно. Например, в Rack (механизм, на базе которого Ruby взаимодействует с веб-сервером; с применением Rack сделаны Rails, Merb и другие Ruby-фреймворки) в форму можно добавить hidden-поле с именем "_method", а в качестве значения указать название метода (например, «PUT») - в этом случае будет отправлен POST-запрос, но Rack сможет сделать вид, что получил PUT, а не POST.

Применение методов GET и POST в PHP трудно переоценить, поскольку эти методы встречаются практически на каждом сайте. Прежде чем изучать ниже описанный материал, советую ознакомится с html тегом

. Рассмотрим каждый из этих методов в подробности.

Метод GET

Метод GET использует для передачи данных строку URL. Возможно, Вы обращали внимание на длинные и непонятные URLы. Например: function.php?login=Alex&email=dezyakin . В данном случае данные обрабатываются в function.php. После знака вопроса "? " идет перечисление передаваемых параметров (параметр разделяются знаком "&") со значениями: параметру login присвоено значение Alex, а переменной email значение dezyakin. Данные будут хранится в суперглобальном массиве $_GET . Приведем пример использования метода GET представлен ниже:

Login : E-mail : С помощью суперглобального массива $_GET выводим принятые значения: */ echo "
login = ". $_GET["login"] ; echo "
email = ". $_GET["email"] ; ?>

Обратите внимание на то, как мы считываем значения из суперглобального массива $_GET: $_GET["имя_переменной"] . В нашем примере имена переменных были объявлены в форме (name=login и name=email).

Совет :
Прежде чем обрабатывать полученные значения советую проверять их на существование через функции isset(имя_переменной) или empty(имя_переменной) - эти функции были рассмотрены в предыдущем уроке 2: переменные в PHP . Например:

проверка на существование с помощью isset: if isset ($_GET["login"] ) { операторы для обработки login ... } //или же проверить на существование с помощью empty: if empty ($_GET["email"] ) { операторы для обработки email ... } ?>

В форме можно указать имя файла, который будет обрабатывать передаваемые значения. Делается это с помощью атрибута формы action , которому можно присвоить адрес этого файла. По умолчанию этот файл присвоен текущему файлу (т.е. обрабатывается в файле, где и расположена форма). Приведем пример, в котором данные из формы передаются на обработку в файл srcipt.php :

Login : E-mail :

В файле script.php должен содержатся какой-то обработчик информации, иначе информация будет передана в пустую.

Метод GET обладает множеством недостатков:

  • Пользователь видит значения передаваемых параметров;
  • Пользователь может легко подделать передаваемые параметры;
  • Неудобная передача бинарной информации (приходится кодировать в текстовый формат);
  • Объем передаваемых данных ограничен - 8 Кбайт;

Из-за выше перечисленных недостатков метод GET применяется только в тех случаях, когда нужно передать небольшой объем данных, а также эти данные никак не засекречены.

Метод POST

Метод POST отличается от GET тем, что данные передаются в закрытой форме. Существует суперглобальный массив $_POST , из которого можно считывать данные следующим образом: $_POST["имя_переменной"] . Например:

Login : "> E-mail : ">
С помощью суперглобального массива $_POST выводим принятые значения: */ echo "
login = ". $_POST["login"] ; echo "
email = ". $_POST["email"] ; ?>

Результат выполнения выше описанного кода представлен на рисунке ниже:

Как видите URL не имеет никакой приписки, но тем не менее данные были получены и выведены.

Примечание :
1) Объем передаваемых значений методом POST по умолчанию ограничен и равен 8 Мбайт. Чтобы увеличить это значение нужно изменить директиву post_max_size в php.ini.

2) В ранних версиях PHP вместо коротких названий суперглобальных массивов $_GET и $_POST использовались более длинные имена: $HTTP_GET_VARS и $HTTP_POST_VARS . По умолчанию они выключены в php 5, но Вы можете их включить в конфигурационном файле php.ini с помощью параметра register_long_arrays . В php 6 версии эти длинные названия будут недоступны.

3) Перед обработкой переменных из $_POST , советую проверять переменные на их наличие, также как это делалось с методом GET .