Из того, что я могу собрать, есть три категории:
- Никогда не используйте
GET
и не используйтеPOST
- Никогда не используйте
POST
и не используйтеGET
- Неважно, какой вы используете.
Правильно ли я предположил эти три случая? Если да, то каковы примеры из каждого случая?
Ответы:
Используйте
POST
для разрушительных действий, таких как создание (я знаю об иронии), редактирование и удаление, потому что вы не можете нажать наPOST
действие в адресной строке вашего браузера. Используйте,GET
когда это безопасно, чтобы позволить человеку вызвать действие. Таким образом, URL-адрес, как:Должен привести вас на страницу подтверждения, а не просто удалить элемент. Так проще избежать несчастных случаев.
POST
также более безопасен, чемGET
, потому что вы не вставляете информацию в URL. И так , используяGET
какmethod
для HTML формы, собирающий пароль или другую конфиденциальную информацию , не самая лучшая идея.Последнее замечание:
POST
может передавать большее количество информации, чемGET
. «POST» не имеет ограничений по размеру для передаваемых данных, в то время как «GET» ограничен 2048 символами.источник
Вкратце
GET
дляsafe and
idempotent
запросовPOST
дляneither safe nor idempotent
запросовВ деталях есть подходящее место для каждого. Даже если вы не следуете принципам RESTful , многое можно узнать, узнав о REST и о том, как работает подход, ориентированный на ресурсы.
safe
Операция представляет собой операцию , которая делаетnot change the data
запрашивается.idempotent
Операция, в которой результат будетbe the same
не важно , сколько раз вы спрашиваете его.Само собой разумеется, что, поскольку GET используются для безопасных операций, они автоматически также становятся идемпотентными . Обычно GET используется для извлечения ресурса (например, вопроса и связанных с ним ответов о переполнении стека) или сбора ресурсов.
Я знаю, что вопрос был о GET и POST, но я вернусь к POST через секунду.
Обычно PUT используется для редактирования ресурса (например, для редактирования вопроса или ответа о переполнении стека).
Обычно POST используется для создания нового ресурса, например, для создания НОВОГО вопроса SO (хотя в некоторых проектах PUT также будет использоваться для этого).
Если вы запустите POST дважды, вы получите ДВА новых вопроса.
обсуждение
С практической точки зрения современные веб-браузеры, как правило, надежно поддерживают только GET и POST (вы можете выполнять все эти операции с помощью вызовов javascript, но с точки зрения ввода данных в формы и нажатия кнопки отправки вы обычно получаете две опции). В приложении RESTful POST часто переопределяется, чтобы обеспечить вызовы PUT и DELETE.
Но даже если вы не следуете принципам RESTful, полезно подумать об использовании GET для получения / просмотра информации и POST для создания / редактирования информации.
Вы никогда не должны использовать GET для операции, которая изменяет данные. Если поисковая система сканирует ссылку на ваш злой оператор или закладка клиента, это может привести к большим проблемам.
источник
Используйте GET, если вы не возражаете против повторения запроса (то есть он не меняет состояние).
Используйте POST, если операция изменяет состояние системы.
источник
method
обязательным)Укороченная версия
GET: обычно используется для отправленных поисковых запросов или любого запроса, когда вы хотите, чтобы пользователь снова мог получить нужную страницу.
Преимущества GET:
Недостатки GET:
POST: используется для запросов с более высоким уровнем безопасности, когда данные могут использоваться для изменения базы данных или страницы, которую вы не хотите, чтобы кто-то делал для закладки.
Преимущества POST:
Недостатки POST:
Более длинная версия
Непосредственно из протокола передачи гипертекста - HTTP / 1.1 :
источник
Первая важная вещь - значение GET против POST:
После этого можно отметить пару вещей:
В любом случае, я не думаю, что мы могли бы «жить» без GET: подумайте, сколько URL-адресов вы используете с параметрами в строке запроса, каждый день - без GET, все эти не будут работать ;-)
источник
http://example.com/var1/value1/var2/value2/var3/value3
мы бы «технически» больше не имели GET…www.mypage.com/contact/
GET использует внутренне что-то вродеindex.php?url=/contact/
Помимо разницы в ограничениях длины во многих веб-браузерах, есть и семантическая разница. Предполагается, что GET являются «безопасными» в том смысле, что они предназначены только для чтения и не изменяют состояние сервера. POST, как правило, изменяют состояние и выдают предупреждения при повторной отправке. Сканеры поисковых систем могут делать GET, но никогда не должны делать POST.
Используйте GET, если вы хотите прочитать данные без изменения состояния, и используйте POST, если вы хотите обновить состояние на сервере.
источник
Мое общее правило - использовать Get, когда вы отправляете запросы на сервер, которые не собираются изменять состояние. Сообщения зарезервированы для запросов к серверу, которые изменяют состояние.
источник
Одно практическое отличие состоит в том, что браузеры и веб-серверы имеют ограничение на количество символов, которые могут существовать в URL. Это отличается от приложения к приложению, но, безусловно, можно поразить его, если у вас есть
textarea
s в ваших формах.Еще одна ошибка с GET - они индексируются поисковыми системами и другими автоматическими системами. У Google когда-то был продукт, который предварительно выбирал ссылки на странице, которую вы просматривали, поэтому они быстрее загружались, если вы нажимали эти ссылки. Это вызвало серьезный хаос на сайтах, на которых были такие ссылки, как
delete.php?id=1
- люди потеряли свои сайты целиком.источник
Используйте GET, когда вы хотите, чтобы URL отражал состояние страницы. Это полезно для просмотра динамически генерируемых страниц, таких как те, что вы видите здесь. POST должен использоваться в форме для отправки данных, например, когда я нажимаю кнопку «Опубликовать свой ответ». Он также производит более чистый URL, поскольку не генерирует строку параметров после пути.
источник
Поскольку GET являются чисто URL-адресами, они могут кэшироваться веб-браузером и могут лучше использоваться для таких вещей, как постоянно генерируемые изображения. (Установите время истечения)
Один пример со страницы Gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET может привести к немного лучшей производительности, некоторые веб-серверы записывают содержимое POST во временный файл перед вызовом обработчика.
Еще одна вещь, чтобы рассмотреть это ограничение размера. GET ограничен размером URL, 1024 байта по стандарту, хотя браузеры могут поддерживать больше.
Передача большего количества данных должна использовать POST для лучшей совместимости с браузером.
Еще меньше, чем этот предел, является проблемой, как писал другой автор, все, что в URL, может оказаться в других частях пользовательского интерфейса браузера, например в истории.
источник
Там нет ничего, что вы не можете сделать сами по себе. Дело в том, что вы не должны изменять состояние сервера в HTTP GET. Прокси-серверы HTTP предполагают, что поскольку HTTP GET не изменяет состояние, то не имеет значения, использует ли пользователь HTTP GET один раз или 1000 раз. Используя эту информацию, они предполагают, что безопасно возвращать кэшированную версию первого HTTP GET. Если вы нарушите HTTP-спецификацию, вы рискуете сломать HTTP-клиента и прокси-серверы. Не делай этого :)
источник
Это затрагивает концепцию REST и то, как сеть была своего рода предназначена для использования. На радио Software Engineering есть отличный подкаст , в котором подробно рассказывается об использовании Get и Post.
Get используется для извлечения данных с сервера, где действие обновления не требуется. Идея заключается в том, что вы должны иметь возможность использовать один и тот же запрос GET снова и снова и получать одну и ту же информацию. URL содержит информацию о получении в строке запроса, потому что он должен был легко отправляться в другие системы, и людям нравится адрес, где можно что-то найти.
Предполагается, что post используется (по крайней мере, в архитектуре REST, на которой основывается сеть) для передачи информации на сервер / указания серверу выполнить действие. Примеры, такие как: обновить эти данные, создать эту запись.
источник
1.3 Быстрый контрольный список для выбора HTTP
GET
илиPOST
Используйте GET, если:
Используйте POST, если:
Источник .
источник
Использование его для обновления состояния - например, GET
delete.php?id=5
для удаления страницы - очень рискованно. Люди узнали, что когда веб-ускоритель Google начал предварительную загрузку URL-адресов на страницах, он ударил по всем ссылкам «удалить» и уничтожил данные людей. То же самое может случиться с пауками поисковой системы.источник
POST может перемещать большие данные, а GET - нет.
Но обычно речь идет не о недостатках GET, а о соглашении, если вы хотите, чтобы ваш веб-сайт / веб-приложение работали хорошо.
Посмотрите на http://www.w3.org/2001/tag/doc/whenToUseGet.html
источник
Из RFC 2616 :
источник
Я использую POST, когда не хочу, чтобы люди видели QueryString или когда QueryString становится большим. Также POST необходим для загрузки файлов.
Я не вижу проблем с использованием GET, я использую его для простых вещей, где имеет смысл хранить вещи в QueryString.
Использование GET позволит также ссылаться на определенную страницу, где POST не будет работать.
источник
Первоначально предполагалось, что GET использовался для получения данных, а POST должен был быть чем угодно. Основное правило, которое я использую, заключается в том, что если я отправляю что-либо обратно на сервер, я использую POST. Если я просто звоню по URL, чтобы получить данные, я использую GET.
источник
Прочитайте статью о HTTP в Википедии . Он объяснит, что такое протокол и что он делает:
и
W3C имеет документ под названием URIs, Addressability и использованием HTTP GET и POST, который объясняет, когда что использовать. Приводя
и
Практическим примером будет всякий раз, когда вы отправляете форму HTML. Вы указываете либо сообщение, либо получить для формы действий. PHP заполнит $ _GET и $ _POST соответственно.
источник
В PHP
POST
ограничение данных обычно устанавливается вашимphp.ini
.GET
я полагаю, ограничен настройками сервера / браузера - обычно это255
байты.источник
С w3schools.com :
Здесь мы выделяем основные различия:
источник
Простая версия POST GET PUT DELETE
источник
Что ж, главное, что вы отправите,
GET
будет показано через URL. Во-вторых, как говорит Ceejayoz, существует ограничение на количество символов для URL.источник
Другое отличие состоит в том, что POST обычно требует две операции HTTP, тогда как GET требует только одну.
Изменить: я должен уточнить - для общих шаблонов программирования. Обычно реакция на POST с использованием прямой веб-страницы HTML представляет собой сомнительный дизайн по ряду причин, одной из которых является раздражающее «вы должны повторно отправить эту форму, хотите ли вы это сделать?» при нажатии кнопки назад.
источник
expect: 100-continue
заголовком, а затем отправка данных происходит только после ответа сервера с помощью a100 CONTINUE
.Как ответили другие, есть ограничение на размер URL с помощью get, и файлы могут быть отправлены только с постом.
Я хотел бы добавить, что можно добавлять вещи в базу данных с помощью get и выполнять действия с постом. Когда скрипт получает сообщение или получает, он может делать все, что хочет автор. Я полагаю, что отсутствие понимания происходит из-за формулировки, которую выбрала книга, или из-за того, как вы ее читаете.
Автор сценария должен использовать сообщения для изменения базы данных и использовать get только для поиска информации.
Языки сценариев предоставили много средств для доступа к запросу. Например, PHP позволяет использовать
$_REQUEST
для извлечения сообщения или получения. Следует избегать этого в пользу более конкретного$_GET
или$_POST
.В веб-программировании гораздо больше возможностей для интерпретации. Есть то, что нужно и что можно сделать, но какой из них лучше, часто обсуждается. К счастью, в этом случае нет никакой двусмысленности. Вы должны использовать сообщения для изменения данных, и вы должны использовать get для получения информации.
источник
Gorgapor,
mod_rewrite
до сих пор часто используетGET
. Он просто позволяет переводить более удобный URL в URL соGET
строкой запроса.источник
Данные HTTP Post не имеют определенного ограничения на объем данных, поскольку разные браузеры имеют разные ограничения для GET. RFC 2068 заявляет:
В частности, вы должны выбрать правильные конструкции HTTP для того, для чего они используются. HTTP GET не должен иметь побочных эффектов и может быть безопасно обновлен и сохранен прокси HTTP и т. Д.
HTTP POST используются, когда вы хотите отправить данные по URL-ресурсу.
Типичным примером использования HTTP GET является поиск, то есть поиск? Query = my + query Типичным примером использования HTTP POST является отправка обратной связи в онлайн-форму.
источник