Когда вы используете POST и когда вы используете GET?
из того, что я могу собрать, есть три категории:
- никогда не используйте
GET
и использоватьPOST
- никогда не используйте
POST
и использоватьGET
- это не имеет значения, какой вы используете.
правильно ли я предполагаю эти три случая? Если да, то каковы некоторые примеры из каждого случая?
28 ответов:
использовать
POST
для деструктивных действий, таких как создание (я знаю об иронии), редактирование и удаление, потому что вы не можете попасть вPOST
действие в адресной строке браузера. ИспользуйтеGET
когда это безопасно, чтобы позволить человеку, чтобы вызвать действие. Так что URL, как:http://myblog.org/admin/posts/delete/357
должен привести вас на страницу подтверждения, а не просто удалить элемент. Так гораздо легче избежать несчастных случаев.
POST
также более безопасно, чемGET
, потому что вы не вставляйте информацию в URL-адрес. И так, используяGET
какmethod
для HTML-формы, которая собирает пароль или другую конфиденциальную информацию, это не лучшая идея.одно заключительное Примечание:
POST
может передавать больший объем информации, чемGET
. "POST" не имеет ограничений по размеру для передаваемых данных, в то время как " GET " ограничен 2048 символами.
коротко
- использовать
GET
наsafe and idempotent
запросы- использовать
POST
наneither safe nor idempotent
запросы
подробнее Есть подходящее место для каждого. Даже если вы не следуете спокойный принципы, многое можно получить от изучения отдыха и того, как работает ресурсно-ориентированный подход.
спокойное приложение будет
use GETs
для операций, которые есть обаsafe and idempotent
.A
safe
операция-это операция, которая делаетnot change the data
просил.An
idempotent
операция-это та, в которой результат будетbe the same
независимо от того, сколько раз вы его просите.само собой разумеется, что, как получает используются для безопасное операции они автоматически также идемпотентных. Обычно GET используется для получения ресурса (вопрос и связанные с ним ответы в стеке переполнение например) или сбор ресурсов.
RESTful приложение будет использовать
PUTs
для операций, которые являютсяnot safe but idempotent
.я знаю, что вопрос был о GET и POST, но я вернусь к POST через секунду.
обычно PUT используется для редактирования ресурса (например, для редактирования вопроса или ответа на переполнение стека).
A
POST
будет использоваться для любой операции, котораяneither safe or idempotent
.обычно сообщение будет использоваться для создания нового ресурса, например, создания нового вопроса SO (хотя в некоторых проектах для этого также будет использоваться PUT).
если вы запустите сообщение дважды, вы в конечном итоге создадите два новых вопроса.
есть также операция удаления, но я предполагаю, что я могу оставить это там :)
Обсуждение
в практическом плане современные веб-браузеры как правило, только поддержка GET и POST надежно (вы можете выполнять все эти операции с помощью вызовов javascript, но с точки зрения ввода данных в формах и нажатия submit у вас обычно есть два варианта). В приложении RESTful сообщение часто будет переопределено, чтобы также предоставлять вызовы PUT и DELETE.
но, даже если вы не следуете принципам RESTful, может быть полезно подумать об использовании GET для получения / просмотра информации и POST для создания / редактирования информация.
вы никогда не должны использовать GET для операции, которая изменяет данные. Если поисковая система просматривает ссылку на ваш злой op или клиентские закладки, это может вызвать большие проблемы.
используйте GET, если вы не возражаете, чтобы запрос повторялся (то есть он не меняет состояние).
используйте POST, если операция изменяет состояние системы.
Короткая Версия
GET: обычно используется для отправленных поисковых запросов или любого запроса, где вы хотите, чтобы пользователь мог снова вытащить точную страницу.
преимущества GET:
- URL-адреса могут быть закладки безопасно.
- страницы могут быть перезагружены безопасно.
недостатки GET:
- переменные передаются через url как пары имя-значение. (Угроза безопасности)
- ограниченное количество переменные, которые могут быть переданы. (На основе браузера. Например, Internet Explorer содержит не более 2048 символов.)
POST: используется для запросов более высокой безопасности, где данные могут использоваться для изменения базы данных или страницы, которую вы не хотите, чтобы кто-то закладывал.
преимущества должности:
- пары имя-значение не отображаются в url. (Безопасность += 1)
- неограниченное количество пар имя-значение может быть передано по почте. ссылка.
недостатки поста:
- страница, которая использовала данные POST, не может быть закладкой. (Если вы так хотите.)
Версия
непосредственно с протокол передачи гипертекста -- HTTP/1.1:
9.3 GET
метод GET означает получение любой информации (в виде сущности), идентифицируемой запросом-URI. Если запрос-URI относится к процессу производства данных, это произведенные данные, которые должны быть возвращены в качестве объекта в ответе, а не исходный текст процесса, если этот текст не является результатом процесса.
семантика способ сделать изменения к "условной сделать", если сообщение запроса включает в себя если-модифицированные-С, Если-без изменений-так, если-бы матч, если-нет-Match или if-Range заголовок поля. Условный метод GET запрашивает, чтобы объект был передан только под обстоятельства, описываемые полями условного заголовка. Условный метод GET предназначен для уменьшения ненужного использования сети, позволяя обновлять кэшированные объекты без необходимости нескольких запросов или передачи данных, уже имеющихся у клиента.
семантика метода GET изменяется на" частичное GET", если сообщение запроса содержит поле заголовка диапазона. Частичное получение запрашивает передачу только части сущности, как описано в разделе 14.35. Метод partial GET предназначен для уменьшения ненужного использования сети, позволяя частично извлеченным объектам быть завершенными без передачи данных, уже имеющихся у клиента.
ответ на запрос GET кэшируется тогда и только тогда, когда он соответствует требованиям для кэширования HTTP, описанным в разделе 13.
см. раздел 15.1.3 для соображений безопасности, при использовании для формы.
9.5 в должности
метод POST используется для запроса, чтобы исходный сервер принял сущность, вложенная в запрос в качестве нового подчиненного ресурса идентифицируется с помощью запроса-URI в строке запроса. Пост предназначен чтобы единый метод охватывал следующие функции:
Аннотация существующих ресурсов;
размещение сообщения на доске объявлений, в группе новостей, в списке рассылки, или аналогичная группа статей;
предоставление блока данных, таких как результат отправки форма, к процессу обработки данных;
расширение базы данных с помощью операции добавления.
фактическая функция, выполняемая методом POST, определяется сервером и обычно зависит от URI в запросе. Размещенные лица подчиняется, что URI таким же образом, что файл находится в подчинении для каталога, содержащего его, новостная статья является в подчинении группа Новостей, в которую она размещена, или запись подчинена база данных.
действие, выполняемое методом POST может не привести к ресурс, который может быть идентифицирован URI. В этом случае, либо 200 (OK) или 204 (нет содержимого) - это соответствующий статус ответа, в зависимости от того, включает ли ответ объект, который описывает результат.
первая важная вещь-это смысл из GET versus POST:
- GET должен быть использован... получить... некоторая информация С сервер
- в то время как почта должна использоваться для отправки некоторой информации до сервер.
После этого, несколько вещей, которые можно отметить :
- используя GET, ваши пользователи могут использовать кнопку "Назад" в своем браузере, и они могут добавлять закладки страницы
- существует ограничение в размере параметров, которые вы можете передать как GET (2Кб для некоторых версий Internet Explorer, если я не ошибаюсь) ; предел гораздо больше для POST и обычно зависит от конфигурации сервера.
В любом случае, я не думаю, что мы могли бы "жить" без GET : подумайте, сколько URL-адресов вы используете с параметрами в строке запроса, каждый день-без GET, все это не будет работать; -)
помимо разницы в ограничениях длины во многих веб-браузерах, существует также семантическая разница. GETs должны быть "безопасными" в том, что они являются операциями только для чтения, которые не изменяют состояние сервера. Сообщения обычно изменяют состояние и выдают предупреждения о повторной отправке. Веб-искатели поисковых систем могут создавать GETs, но никогда не должны создавать сообщения.
используйте GET, если вы хотите читать данные без изменения состояния, и используйте POST, если вы хотите обновить состояние на сервер.
мое общее правило заключается в использовании Get, когда вы делаете запросы к серверу, которые не собираются изменять состояние. Посты зарезервированы для запросов к серверу, которые изменяют состояние.
textareas в ваших формах.
еще один gotcha с GETs-они индексируются поисковыми системами и другими автоматическими системами. У Google когда-то был продукт, который будет предварительно извлекать ссылки на странице, которую вы просматривали, поэтому они будут быстрее загружаться, если вы нажмете их связи. Это вызвало основные хаос на сайтах, которые были связаны как
delete.php?id=1
- люди потеряли все свои сайты.
используйте GET, когда вы хотите, чтобы URL-адрес отражал состояние страницы. Это полезно для просмотра динамически генерируемых страниц, таких как те, которые видны здесь. Сообщение должно использоваться в форме для отправки данных, например, когда я нажимаю кнопку "Опубликовать свой ответ". Он также создает более чистый URL-адрес, поскольку он не генерирует строку параметров после пути.
поскольку GETs-это чисто URL-адреса, они могут быть кэшированы веб-браузером и могут быть лучше использованы для таких вещей, как последовательно сгенерированные изображения. (Установите время истечения срока действия)
один пример со страницы граватара:http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET may yeild незначительно улучшает производительность, некоторые веб-серверы записывают содержимое сообщения во временный файл перед вызовом обработчика.
другое дело рассмотрим это ограничение по размеру. GETs ограничены размером URL-адреса, 1024 байта по стандарту, хотя браузеры могут поддерживать больше.
передача большего количества данных, чем это должно использовать сообщение, чтобы получить лучшую совместимость браузера.
даже меньше этого предела является проблемой, как писал другой плакат, Все, что в URL-адресе может оказаться в других частях пользовательского интерфейса brower, таких как история.
нет ничего, что вы не можете сделать сами по себе. Дело в том, что ты не должно для изменения состояния сервера на HTTP GET. Прокси HTTP предполагают, что поскольку HTTP GET не изменяет состояние, то не имеет значения, вызывает ли пользователь HTTP GET один раз или 1000 раз. Используя эту информацию, они предполагают, что безопасно возвращать кэшированную версию первого HTTP GET. Если вы нарушите спецификацию HTTP, вы рискуете нарушить HTTP-клиент и прокси в дикой природе. Не делай этого :)
Это переходит в концепцию REST и как веб был своего рода предназначен для использования. Есть отличный подкаст на программной инженерии радио, которое дает углубленный разговор об использовании Get и Post.
get используется для извлечения данных с сервера, где обновления не должны быть нужны. Идея заключается в том, что вы должны иметь возможность использовать один и тот же запрос GET снова и снова и возвращать одну и ту же информацию. URL-адрес и получить информацию в строке запроса, потому что он должен был быть легко отправлен в другие системы и людям, как адрес, где что-то найти.
Post должен использоваться (по крайней мере, архитектурой REST, на которой основана сеть) для передачи информации на сервер/указания серверу выполнить действие. Например: обновите эти данные, создайте эту запись.
1.3 быстрый контрольный список для выбора HTTP
GET
илиPOST
используйте GET if:
The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
используйте сообщение, если:
The interaction is more like an order, or The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or The user be held accountable for the results of the interaction.
Я не вижу проблемы с использованием get, хотя я использую его для простых вещей, где имеет смысл хранить вещи в строке запроса.
используя его для обновления состояния-как получить
delete.php?id=5
удалять страницу-очень рискованно. Люди обнаружили это, когда веб - акселератор Google начал предварительную выборку URL-адресов на страницах-он ударил по всем ссылкам "удалить" и уничтожил данные людей. То же самое может произойти с поисковыми пауками.
пост может перемещать большие объемы данных пока получить не может.
но, как правило, речь идет не о коротком замыкании GET, а о Конвенции, если вы хотите, чтобы ваш сайт/веб-приложение вел себя хорошо.
взгляните на http://www.w3.org/2001/tag/doc/whenToUseGet.html
с RFC 2616:
9.3 GET
Метод GET означает получение любой информации (в виде сущность) идентифицируется с помощью Запрос URI. Если запрос-URI ссылается для процесса производства данных, это получены данные, которые должны быть возвращены как сущность в ответе и нет исходный текст процесса, если этот текст является результатом этот процесс.
9.5 POST
метод POST используется для запроса исходного сервера примите сущность, заключенную в запрос в качестве нового подчиненного ресурс, идентифицированный запросом-URI в строке запроса. Пост предназначен чтобы обеспечить равномерный метод для покрытия следующие функции:
- Аннотация существующих ресурсов;
- отправка сообщения в a доска объявлений, группа Новостей, список рассылки, или аналогичная группа статей;
- предоставление блока данных, таких как результат отправки формы, в a процесс обработки данных;
- расширение базы данных с помощью операции добавления.
фактическая функция, выполняемая Пост метод определяется по формуле сервером и обычно зависит от Запрос URI. Размещенные лица подчиненный этому URI в том же так что файл в подчинении каталог, содержащий его, новости статья находится в подчинении телеконференции на которой она размещена, или запись подчиняется базе данных.
действие, выполняемое сообщением метод может не привести к ресурсу это можно определить с помощью URI. В в этом случае, либо 200 (OK) или 204 (нет Содержание) является соответствующим ответом статус, в зависимости от того, есть или нет ответ включает в себя объект, который описывает результат.
Я использую POST, когда я не хочу, чтобы люди видели строку запроса или когда строка запроса становится большой. Кроме того, сообщение необходимо для загрузки файлов.
Я не вижу проблемы с использованием GET, хотя я использую его для простых вещей, где имеет смысл держать вещи в строке запроса.
использование GET позволит связать с определенной страницей тоже возможно, где сообщение не будет работать.
GET и POST в основном позволяют отправлять информацию обратно на веб-сервер из браузера (или другого HTTP-клиента, если на то пошло).
представьте, что у вас есть форма на HTML-странице, и нажатие кнопки "Отправить" отправляет данные в форме обратно на сервер, как пары "имя=значение".
выбор GET в качестве "метода" добавит все данные в URL-адрес, и он будет отображаться в строке URL вашего браузера. Объем информации, которую вы можете отправить обратно с помощью GET ограниченные URL-адреса могут содержать только 1024 символа.
проблемы облачной интеграции Скачать Сейчас Сообщение, с другой стороны, будет (как правило) отправлять информацию через сокет обратно на веб-сервер, и он не будет отображаться в строке URL. Вы можете послать гораздо больше информации на сервер таким образом - и это не ограничивается текстовыми данными. Можно отправлять файлы и даже двоичные данные, такие как сериализованные объекты Java!
первоначальное намерение состояло в том, что GET использовался для возврата данных, а POST должен был быть чем угодно. Эмпирическое правило, которое я использую, заключается в том, что если я отправляю что-либо обратно на сервер, я использую POST. Если я просто вызываю URL-адрес для возврата данных, я использую GET.
читать статья о HTTP в Википедии. Он объяснит, что такое протокол и что он делает:
GET
запрашивает представление указанного ресурса. Обратите внимание, что GET не следует использовать для операций, которые вызывают побочные эффекты, такие как использование его для выполнения действий в веб-приложениях. Одна из причин этого заключается в том, что GET может использоваться произвольно роботами или искателями, которые не должны учитывать побочные эффекты, которые должен вызвать запрос.
и
POST Отправляет данные для обработки (например, из HTML-формы) в идентифицированный ресурс. Данные включаются в тело запроса. Это может привести к созданию нового ресурса или обновлению существующих ресурсов или к тому и другому.
W3C имеет документ с именем URI, Адресуемость и использование HTTP GET и POST это все объясняет когда и чем пользоваться. Цитирование
1.3 быстрый контрольный список для выбора HTTP GET или POST
- использовать сделать если:
- взаимодействие больше похоже на вопрос (т. е. это безопасная работа, такая как запрос, операция чтения или поиск).
и
- использовать сообщение, если:
- взаимодействие больше похоже на порядок, или
- в взаимодействие изменяет состояние ресурса таким образом, чтобы пользователь воспринимал его (например, подписку на услугу), или o пользователь несет ответственность за результаты взаимодействия.
однако перед окончательным решением использовать HTTP GET или POST, пожалуйста, также рассмотрите соображения для конфиденциальных данных и практических соображений.
практический пример будет всякий раз, когда вы отправляете HTML-форму. Вы указываете либо post или get в форме действия. PHP будет заполнять $_GET и $_POST соответственно.
в PHP
POST
ограничение данных обычно устанавливается вашимphp.ini
.GET
ограничивается настройками сервера / браузера я считаю-обычно вокруг255
байт.
простая версия POST GET PUT DELETE используйте GET-если вы хотите получить любой ресурс, например список данных на основе любого идентификатора или имени используйте POST-когда вы хотите отправить любые данные на сервер. имейте в виду, что POST-это тяжелая операция, потому что для обновления мы должны использовать PUT вместо POST внутренне сообщение создаст новый ресурс использовать, когда вы
от w3schools.com:
Что такое HTTP?
протокол передачи гипертекста (HTTP) предназначен для включения связь между клиентами и серверами.
HTTP работает как протокол запроса-ответа между клиентом и сервером.
веб-браузер может быть клиентом, а приложение на компьютере хостами веб-сайта может быть сервер.
пример: клиент (браузер) отправляет HTTP-запрос к серверу; затем сервер возвращает ответ клиенту. Ответ содержит информацию о статусе запроса, а также может содержать запрошенный контент.
два метода HTTP-запроса: GET и POST
два часто используемых метода для запроса-ответа между клиентом и сервера являются: GET и POST.
GET-запрашивает данные из указанного ресурса после отправки данных в быть обработанным до указанного ресурс
здесь мы выделяем основные отличия:
Ну одна важная вещь-это все, что вы представляете над
GET
будет отображаться через URL-адрес. Во-вторых, как говорит Ceejayoz, существует ограничение на символы для URL.
другое отличие заключается в том, что POST обычно требует двух операций HTTP, тогда как GET требует только одного.
Edit: я должен уточнить--для общих шаблонов программирования. Обычно ответ на сообщение с прямой веб-страницей HTML является сомнительным дизайном по целому ряду причин, одна из которых раздражает: "вы должны повторно отправить эту форму, вы хотите это сделать?"при нажатии кнопки "Назад".
как ответили другие, есть ограничение на размер url с get, и файлы могут быть отправлены только с post.
Я хотел бы добавить, что один можете добавить вещи в базу данных с помощью get и выполнять действия с сообщением. Когда сценарий получает сообщение или get, он может делать все, что хочет автор. Я считаю, что отсутствие понимания происходит от формулировки, которую выбрала книга или как вы ее читаете.
автор сценария должны использовать посты измените базу данных и используйте get только для извлечения информации.
скриптовые языки предоставляют множество средств для доступа к запросу. Например, PHP позволяет использовать
$_REQUEST
чтобы получить сообщение или получить. Следует избегать этого в пользу более конкретного$_GET
или$_POST
.в веб-программировании, есть гораздо больше возможностей для толкования. Вот какой один должны и что можете сделать, но какой из них лучше это часто обсуждается. К счастью, в данном случае нет никакой двусмысленности. Ты должны используйте сообщения для изменения данных, и вы должны используйте GET для получения информации.
Gorgapor,
mod_rewrite
по-прежнему часто используетGET
. Это просто позволяет перевести более дружественный URL в URL сGET
строку запроса.
данные HTTP Post не имеют указанного ограничения на объем данных, где, поскольку разные браузеры имеют разные ограничения для GET. в RFC 2068 говорится:
серверы должны быть осторожны в зависимости от длины URI выше 255 байты, потому что какой-то старый клиент или прокси-реализации могут быть неправильно поддержите эти длины
в частности, вы должны правильно построить HTTP для того, для чего они используются. HTTP GET не должен иметь побочные эффекты и могут быть безопасно обновлены и сохранены HTTP-прокси и т. д.
HTTP POST используются, когда вы хотите отправить данные против ресурса url.
типичный пример использования HTTP GET - это поиск, т. е. поиск?Запрос=мой + запрос Типичным примером использования HTTP-сообщения является отправка обратной связи в онлайн-форму.