POST (HTTP)

Поделись знанием:
Перейти к: навигация, поиск

В программировании POST — один из многих методов запроса, поддерживаемых HTTP протоколом, используемым во Всемирной паутине. Метод запроса POST предназначен для запроса, при котором веб-сервер принимает данные, заключенные в тело сообщения, для хранения. Он часто используется для загрузки файла или представления заполненной веб-формы.

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





Посылаемые данные

К:Википедия:Статьи без источников (тип: не указан)

Всемирная паутина и протокол HTTP основаны на ряде методов запросов или «глаголов», включая POST и GET, а также PUT, DELETE и ряд других. Веб-браузеры обычно используют только GET и POST, но REST онлайн-приложения заставляют использовать и многие другие. Метод POST предназначен для отправки представления новой сущности на сервер, так что она будет храниться как подресурс ресурса, идентифицированного URI. Например, для URI example.com/customers с помощью POST запросов можно было бы представлять новых клиентов, каждый из которых содержал бы имя, адрес, контактные данные и тому подобное. Разработчики сайтов отошли от этой концепции по двум причинам. Во-первых, нет никаких технических причин для URI текстуально описывать подчиненные веб-ресурсы, на которых будут сохранены данные, посланные методом POST. В самом деле, последняя часть URI более вероятно опишет страницу обработки веб-приложения и её технологию, например example.com/applicationform.php. Во-вторых, учитывая естественное ограничение большинства веб-браузеров использовать только методы GET или POST, разработчики понимали необходимость добавления дополнительных возможностей в метод POST, включая изменение существующих записей и их удаление.

Попытки исправить первый недостаток начались ещё в 1998 году. Фреймворки веб-приложений, такие как Ruby on Rails и другие помогали разработчикам предоставлять своим пользователям человекопонятные URLы. Что касается второго пункта, можно написать клиентские сценарии или автономные приложения, которые будут использовать другие методы HTTP, преобразовывая их затем в метод POST.

То есть нельзя сказать, что каждая веб-форма должна содержать метод post в открывающем теге. Многие формы используются более точно для получения информации с сервера, без изменения основных баз данных. Для таких форм поиска идеально подходит метод get.

Бывают случаи, когда HTTP GET менее подходит даже для получения данных. Примером является ситуация, когда большое количество данных должно быть записано в URL. Браузеры и веб-серверы могут иметь ограничения на длину URL, которые они обрабатывают без усечения или ошибки. URL-кодирование зарезервированных символов в адресе и строке запроса может значительно увеличить длину, в то время как HTTP-сервер Apache может обрабатывать до 4000 символов в URLК:Википедия:Статьи без источников (тип: не указан)[источник не указан 2851 день], Microsoft Internet Explorer ограничивает длину любого URL 2048 символами.

Равным образом, HTTP GET не должен использоваться для конфиденциальной информации, такой как имена пользователей и пароли, которые должны быть представлены вместе с другими данными для завершения запроса. Даже при использовании HTTPS, предотвращающим данные от перехвата при передаче, истории браузера и журналы веб-сервера, вероятно, содержат полные URLы в виде открытого текста, которые могут быть найдены, если система будет взломана. В этих случаях используется HTTP POST.

Использование для представления веб-форм

Когда веб-браузер отправляет POST запрос с элементами веб-формы, по умолчанию интернет-тип данных медиа это: «application/x-www-form-urlencoded». Это формат для кодирования пар ключ-значение с возможностью дублирования ключей. Каждая пара ключ-значение отделяется символом &, ключ отделен от значения символом = . В ключах и значениях пробелы заменяются на знак +, и затем, используя URL-кодирование, заменяются все не буквенно-цифровые символы.

Например,

Name: Jonathan Doe
Age: 23
Formula: a + b == 13 %!

будет закодировано как

Name=Jonathan+Doe&Age=23&Formula=a+%2B+b+%3D%3D+13+%25%21

Начиная с HTML 4.0, формы могут также представить данные в multipart/form, как определено в RFC 2388(см. также RFC 1867 для более ранней экспериментальной версии определенной как расширение HTML 2.0 и упоминаемой в HTML 3.2). Частный случай метода POST при обращении на ту же страницу, которой принадлежит форма, называется обратной передачей.

Влияние на состояние сервера

в RFC 2616 метод POST должен быть использован для любого контекста, в котором запрос не идемпотентен: то есть, он вызывает изменение состояния сервера каждый раз при выполнении, такие как отправка комментария к сообщению в блоге или интернет-голосование. На практике, метод GET часто зарезервирован, не просто для идемпотентных действий, но и для нульпотентных, то есть без побочных эффектов (в отличие от «без побочных эффектов при втором и последующих запросах» как с идемпотентными операциями). По этой причине сайты поисковых систем, таких как индексаторы поисковых систем обычно используют исключительно метод GET, для предотвращения каких-либо действий при автоматизированных запросах.

Тем не менее, есть причины почему POST используется даже для идемпотентных запросов, особенно если запрос использует не-ASCII символы или очень длинный, из-за ограничений на URL — строка запроса GET-метода может быть очень длинной, особенно при использовании URL-кодирования.

Напишите отзыв о статье "POST (HTTP)"

Ссылки

  • tools.ietf.org/html/rfc2616
  • Berners-Lee, Tim (1998). www.w3.org/Provider/Style/URI.html
  • blogs.perl.org/users/mike_friedman/2009/11/using-http-put-and-delete-methods-in-web-applications.html
  • Friedman, Mike (2009). blogs.perl.org/users/mike_friedman/2009/11/using-http-put-and-delete-methods-in-web-applications.html
  • www.w3.org/TR/html401/interact/forms.html#submit-format, HTML 4.01 Specification. W3C. 1999. Retrieved 17 October 2012.
  • support.microsoft.com/kb/q208427
  • tools.ietf.org/html/rfc2616#section-15.1.3
  • en.wikipedia.org/wiki/Tim_Berners-Lee, en.wikipedia.org/wiki/Dan_Connolly_(computer_scientist), www.w3.org/TR/html401/interact/forms.html#submit-format
  • www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
  • Korpela, Jukka, www.cs.tut.fi/~jkorpela/forms/methods.html
  • www.jmarshall.com/easy/http/#postmethod
  • www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
  • www.w3.org/2001/tag/doc/whenToUseGet.html


Отрывок, характеризующий POST (HTTP)

– Господский хлеб весь цел, – с гордостью сказал Дрон, – наш князь не приказывал продавать.
– Выдай его мужикам, выдай все, что им нужно: я тебе именем брата разрешаю, – сказала княжна Марья.
Дрон ничего не ответил и глубоко вздохнул.
– Ты раздай им этот хлеб, ежели его довольно будет для них. Все раздай. Я тебе приказываю именем брата, и скажи им: что, что наше, то и ихнее. Мы ничего не пожалеем для них. Так ты скажи.
Дрон пристально смотрел на княжну, в то время как она говорила.
– Уволь ты меня, матушка, ради бога, вели от меня ключи принять, – сказал он. – Служил двадцать три года, худого не делал; уволь, ради бога.
Княжна Марья не понимала, чего он хотел от нее и от чего он просил уволить себя. Она отвечала ему, что она никогда не сомневалась в его преданности и что она все готова сделать для него и для мужиков.


Через час после этого Дуняша пришла к княжне с известием, что пришел Дрон и все мужики, по приказанию княжны, собрались у амбара, желая переговорить с госпожою.
– Да я никогда не звала их, – сказала княжна Марья, – я только сказала Дронушке, чтобы раздать им хлеба.
– Только ради бога, княжна матушка, прикажите их прогнать и не ходите к ним. Все обман один, – говорила Дуняша, – а Яков Алпатыч приедут, и поедем… и вы не извольте…
– Какой же обман? – удивленно спросила княжна
– Да уж я знаю, только послушайте меня, ради бога. Вот и няню хоть спросите. Говорят, не согласны уезжать по вашему приказанию.
– Ты что нибудь не то говоришь. Да я никогда не приказывала уезжать… – сказала княжна Марья. – Позови Дронушку.
Пришедший Дрон подтвердил слова Дуняши: мужики пришли по приказанию княжны.
– Да я никогда не звала их, – сказала княжна. – Ты, верно, не так передал им. Я только сказала, чтобы ты им отдал хлеб.
Дрон, не отвечая, вздохнул.
– Если прикажете, они уйдут, – сказал он.
– Нет, нет, я пойду к ним, – сказала княжна Марья
Несмотря на отговариванье Дуняши и няни, княжна Марья вышла на крыльцо. Дрон, Дуняша, няня и Михаил Иваныч шли за нею. «Они, вероятно, думают, что я предлагаю им хлеб с тем, чтобы они остались на своих местах, и сама уеду, бросив их на произвол французов, – думала княжна Марья. – Я им буду обещать месячину в подмосковной, квартиры; я уверена, что Andre еще больше бы сделав на моем месте», – думала она, подходя в сумерках к толпе, стоявшей на выгоне у амбара.
Толпа, скучиваясь, зашевелилась, и быстро снялись шляпы. Княжна Марья, опустив глаза и путаясь ногами в платье, близко подошла к ним. Столько разнообразных старых и молодых глаз было устремлено на нее и столько было разных лиц, что княжна Марья не видала ни одного лица и, чувствуя необходимость говорить вдруг со всеми, не знала, как быть. Но опять сознание того, что она – представительница отца и брата, придало ей силы, и она смело начала свою речь.
– Я очень рада, что вы пришли, – начала княжна Марья, не поднимая глаз и чувствуя, как быстро и сильно билось ее сердце. – Мне Дронушка сказал, что вас разорила война. Это наше общее горе, и я ничего не пожалею, чтобы помочь вам. Я сама еду, потому что уже опасно здесь и неприятель близко… потому что… Я вам отдаю все, мои друзья, и прошу вас взять все, весь хлеб наш, чтобы у вас не было нужды. А ежели вам сказали, что я отдаю вам хлеб с тем, чтобы вы остались здесь, то это неправда. Я, напротив, прошу вас уезжать со всем вашим имуществом в нашу подмосковную, и там я беру на себя и обещаю вам, что вы не будете нуждаться. Вам дадут и домы и хлеба. – Княжна остановилась. В толпе только слышались вздохи.
– Я не от себя делаю это, – продолжала княжна, – я это делаю именем покойного отца, который был вам хорошим барином, и за брата, и его сына.
Она опять остановилась. Никто не прерывал ее молчания.
– Горе наше общее, и будем делить всё пополам. Все, что мое, то ваше, – сказала она, оглядывая лица, стоявшие перед нею.
Все глаза смотрели на нее с одинаковым выражением, значения которого она не могла понять. Было ли это любопытство, преданность, благодарность, или испуг и недоверие, но выражение на всех лицах было одинаковое.
– Много довольны вашей милостью, только нам брать господский хлеб не приходится, – сказал голос сзади.
– Да отчего же? – сказала княжна.
Никто не ответил, и княжна Марья, оглядываясь по толпе, замечала, что теперь все глаза, с которыми она встречалась, тотчас же опускались.
– Отчего же вы не хотите? – спросила она опять.
Никто не отвечал.
Княжне Марье становилось тяжело от этого молчанья; она старалась уловить чей нибудь взгляд.
– Отчего вы не говорите? – обратилась княжна к старому старику, который, облокотившись на палку, стоял перед ней. – Скажи, ежели ты думаешь, что еще что нибудь нужно. Я все сделаю, – сказала она, уловив его взгляд. Но он, как бы рассердившись за это, опустил совсем голову и проговорил:
– Чего соглашаться то, не нужно нам хлеба.
– Что ж, нам все бросить то? Не согласны. Не согласны… Нет нашего согласия. Мы тебя жалеем, а нашего согласия нет. Поезжай сама, одна… – раздалось в толпе с разных сторон. И опять на всех лицах этой толпы показалось одно и то же выражение, и теперь это было уже наверное не выражение любопытства и благодарности, а выражение озлобленной решительности.
– Да вы не поняли, верно, – с грустной улыбкой сказала княжна Марья. – Отчего вы не хотите ехать? Я обещаю поселить вас, кормить. А здесь неприятель разорит вас…
Но голос ее заглушали голоса толпы.
– Нет нашего согласия, пускай разоряет! Не берем твоего хлеба, нет согласия нашего!
Княжна Марья старалась уловить опять чей нибудь взгляд из толпы, но ни один взгляд не был устремлен на нее; глаза, очевидно, избегали ее. Ей стало странно и неловко.
– Вишь, научила ловко, за ней в крепость иди! Дома разори да в кабалу и ступай. Как же! Я хлеб, мол, отдам! – слышались голоса в толпе.