Каковы преимущества использования запроса GET над запросом POST? - PullRequest
28 голосов
/ 12 октября 2008

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

Ответы [ 7 ]

23 голосов
/ 12 октября 2008

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

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

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

15 голосов
/ 12 октября 2008

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

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

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

12 голосов
/ 22 ноября 2009

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

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

Ради потомства, добавив в этот комментарий примечания к блогу: пункт № 3 здесь, вся благодарность Омару А.Л. Забиру (автору ссылочной публикации в блоге ):

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

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

8 голосов
/ 12 октября 2008

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

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

7 голосов
/ 20 ноября 2009

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

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

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

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

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

6 голосов
/ 12 октября 2008

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

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

4 голосов
/ 12 октября 2008

Пожалуй, самое главное, GET доступен для просмотра и просмотра в истории URL и доступен для поиска в Google.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...