- 09.04.16
- 19:35
- 6508
- 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'.