Каковы преимущества использования GET-запрос через POST-запрос?


Несколько моих приложений ajax в прошлом использовали GET request, но теперь я начинаю использовать POST request вместо этого. Почтовые запросы кажутся немного более безопасными и определенно более дружелюбными к url/симпатичными. Таким образом, мне интересно, есть ли какая-либо причина, по которой я должен использовать GET request вообще.

7 24

7 ответов:

Я обычно ставлю вопрос так: меняется ли что-нибудь важное после запроса? (несмотря на ведение журнала и тому подобное). Если да, то это должен быть запрос POST, если нет, то это должен быть запрос GET.

Я рад, что вы называете POST-запросы "немного" более безопасными, потому что это в значительной степени то, что они есть; это тривиально подделать POST-запрос пользователя на страницу. Сделать это POST-запрос, однако, не мешает веб-ускорители или перезагрузок от повторного запуска действие случайно.

Как AJAX, есть еще одно соображение: если вы возвращаете JSON с поддержкой обратного вызова, будьте очень осторожны, чтобы не поместить туда какие-либо конфиденциальные данные, которые вы не хотите, чтобы другие веб-сайты могли видеть. У Википедии была уязвимость в этом направлении, когда пользовательский токен anti-CSRF был обнаружен через их API JSON.

Вы должны использовать GET, где вы делаете запрос, который не имеет побочных эффектов, например, просто получение некоторой информации. Этот запрос может:

  • повторяется без каких - либо проблем-если браузер обнаруживает ошибку, он может молча повторить попытку
  • кэшируйте его результат в браузере
  • кэшируется прокси-сервером

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

Все хорошие моменты, однако, в ответе на вопрос, GET-запросы более полезны в некоторых сценариях по сравнению с POST-запросами:

  1. они могут быть помечены закладками
  2. их можно кэшировать
  3. они быстрее
  4. они имеют известные последствия (предполагая, что они не изменяют данные), поэтому посещение их многократно время-это не проблема.

Ради потомства, обновляя этот комментарий с помощью блога notes re: пункт #3 здесь, вся заслуга Омара аль-Забира (автора ссылка на пост в блоге ):

" Atlas по умолчанию делает HTTP POST для всех вызовов AJAX. Http POST-это дороже, чем получишь ты. Он передает больше байт по проводу, таким образом, принимая драгоценное сетевое время, и это также делает ASP.NET делать дополнительно обработка на серверном конце. Таким образом, Вы должны использовать Http Get столько, сколько возможный. Однако Http Get не позволяет передавать объекты как параметры. Вы можете передавать только цифры, строки и даты. Когда вы делаете в HTTP-запрос GET вызов, Атлас создает зашифрованный URL-адрес и совершает наезд на что url-адрес. Таким образом, вы не должны передавать слишком много контента, который делает url-адрес стать больше, чем 2048 символов. Насколько я знаю, это и есть Макс. длина любого url-адреса.

Еще одна плохая вещь в http post, это на самом деле 2 вызова. Первый браузер отправляет заголовки HTTP post, а сервер отвечает "HTTP 100 Продолжить". Когда браузер получает это, он отправляет фактическое тело."

Это может помочь вам решить, где использовать GET и где использовать POST:

URI, Адресуемость и использование HTTP GET и POST .

Есть еще одно отличие, о котором никто не упоминал.

GET-запросов передаются в строке URL-адреса и, следовательно, подлежат ограничение по длине, как правило, зависит от браузера.

Почтовые запросы могут быть намного больше - на самом деле не ограничены на самом деле. Поэтому, если вам нужно запросить данные с веб-сервера, и вы передаете много информации о параметрах, то запрос POST может быть единственным вариантом.

Итак, как упоминалось ранее, на самом деле запрос GET предназначен для запрос данных (без побочных эффектов) в то время как POST-запрос обычно используется для передачи данных обратно на сервер для хранения (с побочными эффектами). например, используйте POST для загрузки файла. Получить, чтобы получить файл.

Было время, когда IE, по-моему, имел очень короткую строку GET URL. Некоторые приложения, такие как Lotus notes, используют большое количество случайных символов для представления идентификаторов документов. я был недоволен использованием другого продукта, который генерировал случайные строки, поэтому URL-адрес страницы был уникальным каждый раз. Случайная струна была огромной... и он не всегда работал с IE6 по памяти.

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

Разница имеет значение, когда вы используете чистые," спокойные " URL-адреса, где сам URL-адрес указывает ресурс, а различные методы вызывают различные действия на стороне сервера.

Пожалуй, самое главное, что GET-это книга, которую можно пометить / просмотреть в истории url, и поиск с помощью Google.

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