Когда вы используете POST и когда используете GET?

Из того, что я могу собрать, есть три категории:

  1. Никогда не используйте GET и используйте POST
  2. Никогда не используйте POST и используйте GET
  3. Неважно, какой из них вы используете.

Правильно ли я предполагаю эти три случая? Если да, то какие примеры из каждого случая?

Используйте 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 запросов

В деталях Для каждого есть подходящее место. Даже если вы не следуете принципам RESTful , многое можно получить, узнав о REST и о том, как работает ориентированный на ресурсы подход.

Приложение RESTful будет use GETs для операций, которые являются safe and idempotent .

safe операция – это операция, которая not change the data запрошенные not change the data .

idempotent операция – это операция, в которой результат будет be the same независимо от того, сколько раз вы его запрашиваете.

Разумеется, поскольку GET используются для безопасной работы, они автоматически также идемпотентны . Обычно GET используется для извлечения ресурса (например, вопрос и связанные с ним ответы на переполнение стека) или сбор ресурсов.

Приложение RESTful будет использовать PUTs для операций, которые not safe but idempotent являются not safe but idempotent .

Я знаю, что вопрос был о GET и POST, но я вернусь к POST через секунду.

Обычно для редактирования ресурса используется PUT (например, редактирование вопроса или ответ на переполнение стека).

POST будет использоваться для любой операции, которая не является neither safe or idempotent .

Как правило, POST будет использоваться для создания нового ресурса, например, для создания нового вопроса SO (хотя в некоторых проектах для этого также будет использоваться PUT).

Если вы дважды запустите POST, вы создадите два новых вопроса.

Также есть операция DELETE, но я предполагаю, что могу оставить это там 🙂

обсуждение

На практике современные веб-браузеры, как правило, надежно поддерживают GET и POST (вы можете выполнять все эти операции с помощью javascript-вызовов, но с точки зрения ввода данных в формы и нажатия кнопки submit вы обычно получаете два варианта). В приложении RESTful POST часто задерживается для предоставления вызовов PUT и DELETE.

Но даже если вы не следуете принципам RESTful, полезно использовать GET для получения / просмотра информации и POST для создания / редактирования информации.

Вы никогда не должны использовать GET для операции, которая изменяет данные. Если поисковая система сканирует ссылку на ваш злой op или закладки клиента, это может вызвать большие проблемы.

Используйте GET, если вы не возражаете, чтобы повторяемый запрос (то есть он не меняет состояние).

Используйте POST, если операция изменит состояние системы.

Укороченная версия

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

Преимущества GET:

  • URL-адреса можно безопасно размещать в закладках.
  • Страницы могут быть перезагружены безопасно.

Недостатки GET:

  • Переменные передаются через url как пары имя-значение. (Риск безопасности)
  • Ограниченное количество переменных, которые можно передать. (На основе браузера. Например, Internet Explorer ограничен 2048 символами. )

POST: используется для более высоких запросов безопасности, где данные могут использоваться для изменения базы данных или страницы, которую вы не хотите, чтобы кто-то закладок.

Преимущества ПОСТ:

  • Пары имени-значения не отображаются в URL-адресе. (Безопасность + = 1)
  • Неограниченное количество пар имя-значение может быть передано через POST. Справка.

Недостатки POST:

  • Страница, в которой использовались данные POST, не может быть закладкой. (Если вы так хотели.)

Более длинная версия

Непосредственно из протокола передачи гипертекста – HTTP / 1.1 :

9.3 GET

Метод GET означает получение любой информации (в форме объекта), идентифицируемой Request-URI. Если Request-URI ссылается на процесс создания данных, то полученные данные должны быть возвращены в качестве объекта в ответе, а не в исходном тексте процесса, если только этот текст не является результатом процесса.

Семантика метода GET изменяется на «условное GET», если сообщение с запросом содержит поле заголовка If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match или If-Range. Условный метод GET запрашивает передачу объекта только при обстоятельствах, описанных условным полем заголовков. Условный метод GET предназначен для уменьшения ненужного использования сети, позволяя обновлять кэшированные объекты, не требуя множественных запросов или передачи данных, уже находящихся у клиента.

Семантика метода GET изменяется на «частичное GET», если сообщение запроса содержит поле заголовка Range. Частичные запросы GET передают только часть объекта, как описано в разделе 14.35. Частичный метод GET предназначен для уменьшения ненужного использования сети, позволяя завершить частично восстановленные объекты без передачи данных, уже находящихся у клиента.

Ответ на запрос GET можно кэшировать тогда и только тогда, когда он удовлетворяет требованиям к кешированию HTTP, описанным в разделе 13.

См. Раздел 15.1.3 для соображений безопасности при использовании для форм.

9.5 POST

Метод POST используется для запроса, чтобы исходный сервер принял объект, заключенный в запросе, в качестве нового подчиненного ресурса, идентифицированного Request-URI в строке запроса. POST предназначен для обеспечения единообразного метода для покрытия следующих функций:

  • Аннотация существующих ресурсов;

  • Публикация сообщения на доске объявлений, в новостной группе, в списке рассылки или в аналогичной группе статей;

  • Предоставление блока данных, например, результата отправки формы, процессу обработки данных;

  • Расширение базы данных с помощью операции добавления.

Фактическая функция, выполняемая методом POST, определяется сервером и обычно зависит от Request-URI. Опубликованный объект подчиняется этому URI таким же образом, что файл подчинен каталогу, содержащему его, новостная статья подчинена группе новостей, на которую она отправлена, или запись подчинена базе данных.

Действие, выполняемое методом POST, может не привести к ресурсу, который может быть идентифицирован с помощью URI. В этом случае либо 200 (OK), либо 204 (без содержимого) – это соответствующий статус ответа, в зависимости от того, включает ли ответ объект, который описывает результат.

Первое важное значение имеет смысл GET и POST:

  • GET следует использовать для … получения … некоторой информации с сервера,
  • в то время как POST должен использоваться для отправки некоторой информации на сервер.

После этого можно заметить пару вещей:

  • Используя GET, ваши пользователи могут использовать кнопку «Назад» в своем браузере, и они могут создавать закладки
  • Существует ограничение по размеру параметров, которые вы можете передать как GET (2 КБ для некоторых версий Internet Explorer, если я не ошибаюсь) ; предел намного больше для POST и обычно зависит от конфигурации сервера.

Во всяком случае, я не думаю, что мы могли бы «жить» без GET: подумайте о том, сколько URL-адресов, которые вы используете с параметрами в строке запроса, каждый день – без GET, все это не сработает 😉

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

Используйте GET, если вы хотите читать данные без изменения состояния и использовать POST, если хотите обновить состояние на сервере.

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

Одно практическое различие заключается в том, что браузеры и веб-серверы имеют ограничение на количество символов, которые могут существовать в URL-адресе. Он отличается от приложения к приложению, но, безусловно, его можно ударить, если у вас есть textarea в ваших формах.

Еще одна проблема с 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-адресе может оказаться в других частях пользовательского интерфейса Brower, например, истории.

Нет ничего, что вы не можете сделать per se. Дело в том, что вы не должны изменять состояние сервера в HTTP GET. HTTP-прокси предполагают, что, поскольку HTTP GET не изменяет состояние, то независимо от того, вызывает ли пользователь HTTP GET один раз или 1000 раз, нет никакой разницы. Используя эту информацию, они полагают, что безопасно вернуть кэшированную версию первого HTTP GET. Если вы нарушите спецификацию HTTP, вы рискуете разбить HTTP-клиент и прокси-серверы в дикой природе. Не делай этого 🙂

Это охватывает концепцию REST и то, как веб-сайт был предназначен для использования. Существует отличный подкаст на радио Software Engineering, в котором подробно рассказывается об использовании Get и Post.

Get используется для извлечения данных с сервера, где действие обновления не требуется. Идея заключается в том, что вы должны иметь возможность использовать один и тот же запрос GET снова и снова и возвращать ту же самую информацию. URL-адрес содержит информацию о получении в строке запроса, поскольку она должна быть легко передана другим системам, а людям – адрес, где можно найти что-то.

Предполагается, что используется почта (по крайней мере, с помощью архитектуры REST, на которой основан веб-сайт) для передачи информации на сервер / передачи серверу действий. Примеры: обновите эти данные, создайте эту запись.

1.3 Быстрый контрольный список для выбора HTTP GET или POST

Используйте GET, если:

  The interaction is more like a question (ie, it is a safe operation such as a query, read operation, or lookup). 

Используйте POST, если:

  The interaction is more like an order, or The interaction changes the state of the resource in a way that the user would perceive (eg, a subscription to a service), or The user be held accountable for the results of the interaction. 

Источник .

я не вижу проблемы с использованием get хотя, я использую его для простых вещей, где имеет смысл держать вещи в строке запроса.

Использовать его для обновления состояния – как GET delete.php?id=5 для удаления страницы – очень рискованно. Люди узнали об этом, когда веб-ускоритель Google начал предварительную выборку URL-адресов на страницах – он ударил все ссылки «удалить» и уничтожил данные людей. То же самое может произойти с пауками поисковых систем.

POST может перемещать большие данные, а GET не может.

Но, как правило, речь идет не о сокращении GET, а скорее о согласии, если вы хотите, чтобы ваш веб-сайт / webapp хорошо себя вел.

Посмотрите http://www.w3.org/2001/tag/doc/whenToUseGet.html

Из RFC 2616 :

9.3 GET
Метод GET означает получение любой информации (в форме объекта), идентифицируемой Request-URI. Если Request-URI ссылается на процесс создания данных, то полученные данные должны быть возвращены в качестве объекта в ответе, а не в исходном тексте процесса, если только этот текст не является результатом процесса.

9.5 POST
Метод POST используется для запроса, чтобы исходный сервер принял объект, заключенный в запросе, в качестве нового подчиненного ресурса, идентифицированного Request-URI в строке запроса. POST предназначен для обеспечения единообразного метода для покрытия следующих функций:

  • Аннотация существующих ресурсов;
  • Публикация сообщения на доске объявлений, в новостной группе, в списке рассылки или в аналогичной группе статей;
  • Предоставление блока данных, например, результата отправки формы, процессу обработки данных;
  • Расширение базы данных с помощью операции добавления.

Фактическая функция, выполняемая методом POST, определяется сервером и обычно зависит от Request-URI. Опубликованный объект подчиняется этому URI таким же образом, что файл подчинен каталогу, содержащему его, новостная статья подчинена группе новостей, на которую она отправлена, или запись подчинена базе данных.

Действие, выполняемое методом POST, может не привести к ресурсу, который может быть идентифицирован с помощью URI. В этом случае либо 200 (OK), либо 204 (без содержимого) – это соответствующий статус ответа, в зависимости от того, включает ли ответ объект, который описывает результат.

Первоначальное намерение состояло в том, что GET использовался для получения данных назад, и POST должен был быть чем угодно. Эмпирическое правило, которое я использую, состоит в том, что если я отправляю что-либо обратно на сервер, я использую POST. Если я просто вызываю URL-адрес для возврата данных, я использую GET.

Прочитайте статью об HTTP в Википедии . Он объяснит, что такое протокол и что он делает:

ПОЛУЧИТЬ

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

а также

POST Отправляет данные, которые необходимо обработать (например, из HTML-формы) в идентифицированный ресурс. Данные включены в тело запроса. Это может привести к созданию нового ресурса или обновлений существующих ресурсов или того и другого.

W3C имеет документ с именем URI, адресность и использование HTTP GET и POST, которые объясняют, когда использовать что. Приводя

1.3 Быстрый контрольный список для выбора HTTP GET или POST

  • Используйте GET, если:
    • Взаимодействие больше похоже на вопрос (то есть, это безопасная операция, такая как запрос, операция чтения или поиск).

а также

  • Используйте POST, если:
    • Взаимодействие больше похоже на порядок, или
    • Взаимодействие изменяет состояние ресурса таким образом, чтобы пользователь воспринимал (например, подписку на услугу), или o Пользователь был привлечен к ответственности за результаты взаимодействия.

Однако перед окончательным решением использовать HTTP GET или POST, пожалуйста, также рассмотрите соображения для конфиденциальных данных и практических соображений.

Практический пример – всякий раз, когда вы отправляете HTML-форму. Вы указываете любой пост или получите для действия формы. PHP будет заполнять $ _GET и $ _POST соответственно.

В PHP ограничение данных POST обычно устанавливается вашим php.ini . Я полагаю, что GET ограничено настройками сервера / браузера – обычно около 255 байт.

Я использую POST, когда я не хочу, чтобы люди видели QueryString или когда QueryString становится большим. Кроме того, для загрузки файлов требуется POST.

Я не вижу проблемы с использованием GET, хотя, я использую его для простых вещей, где имеет смысл хранить вещи в QueryString.

Использование GET позволит установить связь с конкретной страницей, где POST не будет работать.

Простая версия POST GET PUT DELETE использует GET – когда вы хотите получить любой ресурс, такой как Список данных на основе любого имени или имени, используйте POST – когда вы хотите отправить какие-либо данные на сервер. имейте в виду, что POST – это тяжелая операция, потому что для обновления мы должны использовать PUT вместо POST внутри POST создадим новое использование ресурсов PUT – когда вы

От w3schools.com :

Что такое HTTP?

Протокол передачи гипертекста (HTTP) предназначен для взаимодействия между клиентами и серверами.

HTTP работает как протокол запроса-ответа между клиентом и сервером.

Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, может быть сервером.

Пример: клиент (браузер) отправляет HTTP-запрос серверу; то сервер возвращает ответ клиенту. Ответ содержит информацию о состоянии запроса и может также содержать запрошенный контент.

Два метода запроса HTTP: GET и POST

Два часто используемых метода для запроса-ответа между клиентом и сервером: GET и POST.

GET – запрашивает данные из заданного ресурса POST – передает данные, подлежащие обработке, на указанный ресурс

Здесь мы различаем основные отличия:

введите описание изображения здесь

GET и POST в основном позволяют отправлять информацию обратно на веб-сервер из браузера (или другого HTTP-клиента, если на то пошло).

Представьте, что у вас есть форма на странице HTML, и нажатие кнопки «отправить» отправляет данные в форме обратно на сервер, как пары «имя = значение».

Выбрав GET как «метод», вы добавите все данные в URL-адрес, и он появится в строке URL вашего браузера. Объем информации, которую вы можете отправить обратно с использованием GET, ограничен, поскольку URL-адреса могут содержать только 1024 символа.

Проблемы интеграции с облаком Загрузка Теперь POST с другой стороны (как правило) отправит информацию через сокет обратно на веб-сервер и не появится в строке URL. Вы можете отправить гораздо больше информации на сервер таким образом – и это не ограничивается текстовыми данными. Можно отправлять файлы и даже двоичные данные, такие как сериализованные объекты Java!

Ну, одна важная вещь – все, что вы отправляете через GET , будет отображаться через URL-адрес. Во-вторых, как говорит Ceejayoz, существует ограничение на символы для URL-адреса.

Другое отличие состоит в том, что POST обычно требует двух HTTP-операций, тогда как GET требует только одного.

Изменить: я должен уточнить – для общих шаблонов программирования. Как правило, ответ на POST с прямолинейной HTML-страницей является сомнительным дизайном по разным причинам, одним из которых является раздражающее «вы должны повторно отправить эту форму, хотите ли вы это сделать?» при нажатии кнопки «Назад».

Как утверждают другие, существует ограничение на размер url с get, и файлы могут быть отправлены только с сообщением.

Я хотел бы добавить, что можно добавлять вещи в базу данных с помощью get и выполнять действия с сообщением. Когда скрипт получает сообщение или get, он может делать все, что хочет сделать автор. Я считаю, что отсутствие понимания исходит из формулировки, которую выбрала книга, или как вы ее читаете.

Автор сценария должен использовать сообщения для изменения базы данных и использовать доступ только для извлечения информации.

Языки сценариев предоставляют множество способов, с помощью которых можно получить доступ к запросу. Например, PHP позволяет использовать $_REQUEST для получения сообщения или получения. Следует избегать этого в пользу более конкретных $_GET или $_POST .

В веб-программировании есть гораздо больше возможностей для интерпретации. Есть то, что нужно, и что можно сделать, но что лучше, часто приходится обсуждать. К счастью, в этом случае нет никакой двусмысленности. Вы должны использовать сообщения для изменения данных, и вы должны использовать get для извлечения информации.

Gorgapor, mod_rewrite все еще часто использует GET . Он просто позволяет перевести более дружественный URL-адрес в URL-адрес с строкой запроса GET .

HTTP Post data doesn’t have a specified limit on the amount of data, where as different browsers have different limits for GET’s. The RFC 2068 states:

Servers should be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations may not properly support these lengths

Specifically you should the right HTTP constructs for what they’re used for. HTTP GET’s shouldn’t have side-effects and can be safely refreshed and stored by HTTP Proxies, etc.

HTTP POST’s are used when you want to submit data against a url resource.

A typical example for using HTTP GET is on a Search, ie Search?Query=my+query A typical example for using a HTTP POST is submitting feedback to an online form.

  • Как сделать HTTP-сообщение в Android?
  • Использование HttpClient и HttpPost в Android с параметрами post
  • Проблемы с вызовом метода столбца controllerа
  • Как загрузить файл с помощью библиотеки Volley в android?
  • Как имитировать запрос HTTP HTTP POST и результат захвата в C #
  • Чтение FromUri и FromBody одновременно
  • Загрузка изображений на сервер
  • jQuery AJAX POSTing массив для ASP.NET MVC Controller
  • OkHttp Post Body как JSON
  • Как использовать тип: «POST» в jsonp ajax call
  • Отправка файлов с использованием HTTP POST в c #
  • Interesting Posts

    multimap в .NET.

    Пример рабочего клиента Soap

    в Espresso, как выбрать один вид, у которого одинаковый идентификатор, чтобы избежать AmbiguousViewMatcherException

    Резервное копирование / восстановление Android: как создать резервную копию внутренней базы данных?

    Разница между именем хоста и доменным именем

    В чем разница между выпусками Spring GA, RC и M2?

    Как проверить, что Java String не все пробелы?

    Простой пример сетки Android, использующий RecyclerView с GridLayoutManager (например, старый GridView)

    Почему data.table определен: = а не перегрузка <-?

    Как создать закладки PDF из Microsoft Word?

    Кросс-платформенная файловая система

    Импорт android.support.v7 невозможен.

    Какая программа делает этот звук и как я могу заставить его остановиться

    Выбрасывать каждый четный или нечетный кадры с помощью FFmpeg?

    Как выполнять навигацию по страницам для многих, многих страниц? Логарифмическая навигация по страницам

    Давайте будем гением компьютера.