Наиболее распространенный метод по количеству запросов - это конечно же метод GET. Он же и самый простой метод. "Get" в переводе на русский язык означает "получить". Т.е. это обычный запрос ресурса. Сообщение передаваемое методом GET не должно иметь содержимого. Если содержимое присутствует, оно игнорируется.

Кэширование GET запросов

В некоторых статьях по кэшированию в HTTP можно встретить такую фразу "Internet Explorer кеширует GET-запросы" и, что дескать кто-то может ожидать, что GET-запросы не кэшируются. Здесь подразумевается кэширование не запросов, а ответов на GET-запросы. В другой статье я нашел следующее утверждение "Страницы запрашиваемые по GET и содержащие параметры (в URL присутствует '?') не сохраняются в кэш, если не указано обратное".

С точки зрения протокола HTTP не существует так называемых GET-параметров, которые записываются в URL после знака "?". В HTTP существует понятие URN (Uniform Resource Name - унифицированное имя ресурса), который включается в строку запроса. Из чего состоит этот URN - протоколу не важно, главное чтобы этот URN был корректно воспринят сервером. Поэтому-то в интернете можно встретить весьма затейливые URL, которые прекрасно работают.

Поэтому решение о кэшировании ресурса принятое по результатам анализа URL - исключительная прерогатива программных компонентов. Если какие-то браузеры раньше так и делали, то это было связано с предположением, что GET-параметры свидетельствуют о динамическом содержимом ресурса, которое нет смысла кэшировать. Но это было очень давно. Сейчас ни один программный компонент не будет принимать решение о кэшировании ресурса на основании анализа URL.

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

GET-параметры

Так называемые GET-параметры, это переменные, которые передаются в строке URL. Они включаются в конец URN после знака "?". Параметры отделяются друг от друга знаком "&", а имя и значение параметра разделены знаком "=".

Само название "GET-параметры" не корректно. От этого у многих создается впечатление, что GET-параметры присущи только GET-запросам. Это не верно. GET-параметры не имеют никакого отношения к GET-запросу и могут присутствовать при любом методе запроса. Так POST-запрос может одновременно содержать параметры заключенные в тело сообщения, называемые POST-параметрами, и параметры в строке URL, называемые GET-параметрами.

GET-параметры в PHP

Из переменной окружения $_SERVER['QUERY_STRING'] можно получить сырую строку GET-параметров, которая содержится в URL после знака "?". PHP разбирает эту строку и помещает все GET-параметры в специальный глобальный массив $_GET. Разбор этой строки, помимо отделения имени и значения параметра, а так же отделения параметров друг от друга, заключается в так называемом URL-декодировании. Оно подразумевает замену символов "+" на пробелы и декодировании символов заданных при помощи символа "%". URL-кодирование применяется в отношении не ASCII символов, c тем чтобы их тоже можно было передавать в строке запроса, а так же в отношении специальных символов, чтобы нивелировать их особое назначение.

Вы можете сами осуществлять URL-кодирование и декодирование строк при помощи функций urlencode() и urldecode() и, rawurlencode() и rawurldecode(). Так же в PHP 5 появилась комплексная функция http_build_query(), которая из ассоциативного массива создает строку URL-кодированных переменных. Эту строку можно поместить и в строку URL (если она не очень длинная), и в тело запроса. В первом случае это будут GET-параметры, а во втором POST-параметры.

Читайте также:

  1. методы запроса: метод POST :: PHP, Apache, кэш