Про GET и POST для AJAX

  • 09.04.16
  • 19:35
  • 4763
  • 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 — время в секундах, на протяжении которого ответ считается свежим:

Заголовки задаются до какого-либо вывода. Например, в начале обработчика AJAX-запроса.

Если же — напротив — возможное кеширование необходимо предотвратить, к отправляемым данным добавляется текущий штамп времени. При использовании jQuery.ajax() это достигается заданием false в параметре cache.

Замечание: ответ сервера кешируется браузером, — не jQuery. Если пришедшая информация оказалась некорректной — из-за каких-либо временных неполадок, например, — и jQuery разобрать её не способен, она всё равно будет кеширована. Поэтому все повторы того же запроса на протяжении max-age секунд будут завершаться ошибкой со статусом 'parsererror'.

Оставить комментарий

Добавить комментарий