Каковы преимущества использования запроса GET над запросом POST?
несколько моих приложений ajax в прошлом использовали GET request, но теперь я начинаю использовать POST request вместо этого. Запросы POST кажутся немного более безопасными и определенно более дружелюбными/красивыми. Таким образом, мне интересно, есть ли причина, по которой я должен использовать GET request вообще.
7 ответов
Я вообще поставил вопрос так:что-нибудь важное меняется после запроса? (несмотря на ведение журнала и тому подобное). Если это так, это должен быть запрос POST, если нет, это должен быть запрос GET.
Я рад, что вы называете запросы POST "немного" более безопасными, потому что это в значительной степени то, что они есть; тривиально подделать запрос POST пользователем на страницу. Однако выполнение запроса POST предотвращает веб-ускорители или перезагрузки повторный запуск действия случайно.
как AJAX, есть еще одно соображение: если вы возвращаете JSON с поддержкой обратного вызова, будьте очень осторожны, чтобы не помещать какие-либо конфиденциальные данные, которые вы не хотите, чтобы другие веб-сайты могли видеть там. Википедия имела уязвимость в этом направлении, где пользовательский токен анти-CSRF был обнаружен через их JSON API.
вы должны использовать GET, где вы делаете запрос, который не имеет побочных эффектов, например, просто получение некоторой информации. Эта просьба может:
- повторяется без каких - либо проблем-если браузер обнаруживает ошибку, он может тихо повторить
- его результат кэшируется браузером
- кэширование на прокси -
все это хорошо. Все, что только извлекает данные (особенно общедоступные данные), действительно должно быть GET. Сервер должен send sensible Last-Modified: и Expires: заголовки, чтобы разрешить кэширование, если это необходимо.
все хорошие моменты, однако, в ответ на вопрос, GET запросы более полезны в определенных сценариях над запросами POST:
- Они могут быть закладки
- Они могут быть кэшированы
- они быстрее
- Они имеют известные последствия (предполагая, что они не изменяют данные), поэтому посещение их несколько времена не проблема.
ради потомства, обновляя этот комментарий с помощью блога отмечает re: point #3 здесь, все кредит Омару аль Забиру (автору ссылки блоге):
"Atlas по умолчанию делает HTTP POST для всех вызовов AJAX. HTTP POST дороже, чем Http GET. Он передает больше байтов по проводам, таким образом, принимая драгоценное сетевое время, и это также делает ASP.NET do extra обработка на сервере. Итак, вы должны использовать Http Get столько, сколько вероятный. Однако Http Get не позволяет передавать объекты как параметры. Можно передать числовой, только строка и дата. Когда вы делаете вызов HTTP Get, Atlas строит закодированный url и делает хит к этому url-адрес. Таким образом, вы не должны передавать слишком много контента, который делает url-адрес более 2048 символов. Насколько я знаю, это максимум. длина любого url.
еще одна плохая вещь о http post, это на самом деле 2 вызова. Первый браузер отправляет заголовки HTTP post и ответы сервера с " HTTP 100 Продолжать." Когда браузер получает это, он отправляет фактическое тело."
есть еще одно отличие, которое никто не упоминал.
GET запросы передаются в строке URL и поэтому подлежат ограничению длины, обычно зависящему от браузера.
POST запросы могут быть намного больше-на самом деле не ограничены на самом деле. Поэтому, если вам нужно запросить данные с веб-сервера, и вы передаете много информации о параметрах, тогда POST-запрос может быть единственным вариантом.
Итак, как упоминалось ранее, действительно получить запрос предназначен для запроса данных (без побочных эффектов), в то время как запрос POST обычно используется для передачи данных обратно на сервер для хранения (с побочными эффектами). например, используйте POST для загрузки файла. Получить, чтобы получить файл.
было время, когда IE, я считаю, имел очень короткую строку URL GET. Некоторые приложения, такие как Lotus notes, используют большое количество случайных символов для представления идентификаторов документов. У меня было недовольство использованием другого продукта, который генерировал случайные строки, поэтому URL страницы был уникальным каждый раз. Случайная строка была огромной... и он не всегда работал с IE6 по памяти.
POST запросы так же небезопасны, как и GETs. Основное отличие заключается в том, что POST используется для изменения состояния серверного приложения, а GET запрашивает только данные из него.
разница имеет значение, когда вы используете чистые, "restful" URL-адреса, где сам URL-адрес указывает ресурс, а различные методы вызывают различные действия на стороне сервера.
возможно, самое главное, GET-это книга, отмечаемая / просматриваемая в истории url и доступная для поиска с помощью Google.
сообщение важно, где вы не хочу событие, которое будет bookmarkable или может быть введено в качестве URL - адреса-в противном случае вы (или Google обхода URL-адресов) может в конечном итоге случайно делать такие вещи, как удаление пользователей из вашей системы, например.