- 09.04.16
- 19:35
- 4816
- 0
Основное отличие заключается в методе отправки данных: в случае GET
данные размещаются в URL, в случае POST
— в теле запроса.
GET
используется, когда
- запрос не изменяет данных на сервере;
- допустимо или желательно кеширование результата запроса браузером;
- серверу передаётся небольшой набор данных — в URL-кодировании он должен заведомо умещаться в 2048 байт вместе с путём к скрипту, обрабатывающему запрос (для WordPress это
/wp-admin/admin-ajax.php
, поэтому длина URL-кодированных данных — не более 2023 байт);Такой предел задан браузером IE, ограничивающим длину URL 2083 знаками, из которых под путь и параметры отводится не более 2048.
Если данные динамичны и могут не поместиться в URL, следует использовать метод
POST
. - данные не являются конфиденциальными — допустимо сохранение URL в логах сервера, а также формирование URL вручную в адресной строке браузера;
- запрос должен быть обработан быстро;
Единственным аргументом в пользу скорости
GET
-запросов является возможность их кеширования. В отсутствие кеширования скорости приблизительно равны.
POST
используется, если
- запрос может изменять информацию на сервере;
- данных много;
- данные конфиденциальны.
Кеширование доступно только для GET
-запросов, POST
-запросы не кешируются. Браузеры относятся нему по-разному: IE 8–11 кешировали запросы с отсутствующим Cache-Control
, IE 8 — с max-age=0
, а opera 12 не кешировала вовсе, несмотря на заголовок.
В общем случае для кеширования следует на стороне сервера установить заголовок Cache-Control: max-age=N
, где N
— время в секундах, на протяжении которого ответ считается свежим:
1 2 |
// обработчик ajax-запроса, до первого вывода: header('Cache-Control: max-age=3600'); |
Заголовки задаются до какого-либо вывода. Например, в начале обработчика AJAX-запроса.
Если же — напротив — возможное кеширование необходимо предотвратить, к отправляемым данным добавляется текущий штамп времени. При использовании jQuery.ajax()
это достигается заданием false
в параметре cache
.
Замечание: ответ сервера кешируется браузером, — не jQuery. Если пришедшая информация оказалась некорректной — из-за каких-либо временных неполадок, например, — и jQuery разобрать её не способен, она всё равно будет кеширована. Поэтому все повторы того же запроса на протяжении max-age
секунд будут завершаться ошибкой со статусом 'parsererror'
.