Вопрос

Насколько я могу судить, есть три категории:

  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 andidempotent Запросы
  • Использовать POST для neither safe nor idempotent Запросы

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

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

А safe операция – это операция, которая выполняет not change the data просил.

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

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

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

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

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

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

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

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

Еще есть операция DELETE, но я думаю, ее можно оставить :)

Обсуждение

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

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

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

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

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

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

ПОЛУЧАТЬ:Обычно используется для отправленных поисковых запросов или любого запроса, в котором вы хотите, чтобы пользователь мог снова открыть нужную страницу.

Преимущества ГЕТ:

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

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

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

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

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

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

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

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

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

Прямо из Протокол передачи гипертекста — HTTP/1.1:

9.3 ПОЛУЧИТЬ

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

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

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

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

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

Фактическая функция, выполняемая методом POST, определяется сервером и обычно зависит от запроса-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-адресе.Это отличается от приложения к приложению, но его, безусловно, можно достичь, если у вас есть textareas в ваших формах.

Еще одна проблема с GET — они индексируются поисковыми системами и другими автоматическими системами.Когда-то у Google был продукт, который предварительно загружал ссылки на просматриваемой вами странице, поэтому они загружались быстрее, если вы нажимали на эти ссылки.Это вызвало главный хаос на сайтах, на которых были такие ссылки, как delete.php?id=1 - люди потеряли целые сайты.

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

Поскольку GET представляют собой чисто URL-адреса, они могут кэшироваться веб-браузером и их лучше использовать для таких вещей, как последовательно генерируемые изображения.(Установите срок действия)

Один пример со страницы граватара: 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, если:

    The interaction is more like a question (i.e., 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 (e.g., 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, а о соглашении, если вы хотите, чтобы ваш веб-сайт/веб-приложение работало хорошо.

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

От РФК 2616:

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


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

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

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

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

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

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

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

Простая версия POST GET PUT DELETE

  • используйте GET - если вы хотите получить какой-либо ресурс, например список данных, на основе любого идентификатора или имени.
  • используйте POST — если вы хотите отправить какие-либо данные на сервер.Имейте в виду, что Post - это тяжелый вес, потому что для обновления мы должны использовать PUT вместо Post Post Post, создаст новый ресурс
  • используйте PUT - когда вы

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

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

ПОЛУЧАТЬ

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

и

ПОЧТАОтправляет данные для обработки (например, из 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 байты.

От w3schools.com:

Что такое HTTP?

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

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

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

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

Два метода HTTP-запроса:ПОЛУЧИТЬ и отправить

Два обычно используемых метода для ответа на запрос между клиентом и сервером:ПОЛУЧИТЬ и отправить.

GET - Запрос данных из указанного ресурса - подчиняет данные для обработки в указанный ресурс

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

enter image description here

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

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

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

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

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

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

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

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

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

Данные HTTP Post не имеют определенного ограничения на объем данных, поскольку разные браузеры имеют разные ограничения для GET.В RFC 2068 говорится:

Серверы должны быть осторожны в зависимости от длины URI выше 255 байтов, потому что некоторые более старые реализации клиента или прокси могут не поддерживать эти длины

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

HTTP POST используются, когда вы хотите отправить данные по URL-адресу.

Типичным примером использования HTTP GET является поиск, т.е.Search? Query = my+Query Обильный пример для использования HTTP -сообщения - отправка обратной связи в онлайн -форму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top