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

StackOverflow https://stackoverflow.com/questions/195212

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Тем не менее, в ответ на этот вопрос GET-запросы более полезны в определенных сценариях, чем POST-запросы.

<Ол>
  • Они могут быть добавлены в закладки
  • Их можно кэшировать
  • Они быстрее
  • Они имеют известные последствия (при условии, что они не меняют данные), поэтому посещение их несколько раз не проблема.
  • Ради потомков, обновив этот комментарий, добавив в него примечания к блогу: пункт № 3 здесь, все благодарности Омару А.Л. Забиру (автору запись в блоге ):

      

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

         

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

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

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

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

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

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

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

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

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

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

    Возможно, самое важное, что GET доступен для просмотра / просмотра в истории URL и доступен для поиска в Google.

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

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