GET

Метод HTTP

Спецификация HTTP-метода GET

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

Принято считать, что идентификаторы ресурсов - это имена путей к удаленной файловой системе, а представления - это копии содержимого этих файлов. Действительно, многие ресурсы реализованы именно так (см. раздел 9.1, где рассматриваются вопросы безопасности). Однако на практике таких ограничений не существует. HTTP-интерфейс для ресурса с одинаковой вероятностью может быть реализован в виде дерева объектов содержимого, программного представления различных записей базы данных или шлюза к другим информационным системам. Даже если механизм отображения URI привязан к файловой системе, сервер происхождения может быть настроен на выполнение файлов с запросом в качестве входных данных и отправку выходных данных в качестве представления, а не на передачу файлов напрямую. Независимо от этого, только серверу-оригинатору необходимо знать, как каждый из его идентификаторов ресурсов соответствует той или иной реализации и как каждой реализации удается выбрать и отправить текущее представление целевого ресурса в ответ на GET.

Клиент может изменить семантику GET, сделав его "запросом диапазона", запрашивающим передачу только некоторой части (частей) выбранного представления, отправив в запрос поле заголовка Range ([RFC7233]).

Полезная нагрузка в сообщении запроса GET не имеет определенной семантики; отправка тела полезной нагрузки в запросе GET может привести к тому, что некоторые существующие реализации отклонят запрос.

Ответ на запрос GET является кэшируемым; кэш может использовать его для удовлетворения последующих запросов GET и HEAD, если иное не указано в поле заголовка Cache-Control (раздел 5.2 [RFC7234]).

Метод HTTP GET был специфицирован в разделе 4.3.1 документа RFC 7231 рабочей группой по проектированию Интернета (IETF) и консорциумом World Wide Web Consortium (W3C).

Описание метода GET

Метод GET протокола HTTP можно сравнить с цифровым библиотекарем. Он вежливо просит сервер предоставить данные без внесения каких-либо изменений в сами данные — это чистый пассивный запрос.

Что делает метод GET особенным?

  1. Последовательность: Представьте, что вы просите библиотекаря одну и ту же книгу несколько раз – каждый раз вы получите одну и ту же книгу. То же самое касается запроса GET: он постоянно возвращает один и тот же результат.
  2. Чтение, а не запись: Запрос GET действует как наблюдатель. Он просматривает данные, но не изменяет их.
  3. Информация в URL: Считайте URL адресом или карточкой индекса. Он указывает, какую книгу или информацию вы ищете. Однако будьте осторожны: на этих карточках не следует делать личные заметки, так как другие могут их видеть.
  4. Быстрые и эффективные ответы: Благодаря возможности кэширования ответов, метод GET может быстро отвечать на повторяющиеся запросы, так же как и хорошо организованный библиотекарь, который точно знает, где находится каждая книга.

Но есть и ограничения:

  1. Ограниченное пространство для заметок: В URL доступно только ограниченное количество места для информации. Это как писать на маленькой индексной карточке.
  2. Никаких секретов: Поскольку URL видимы и могут быть сохранены, на них не следует делать заметок с конфиденциальной информацией.
  3. Без вмешательства: Наблюдатель не влияет на то, что он наблюдает. Поэтому метод GET не должен использоваться для изменения данных. Для этого у нас есть другие инструменты в нашем цифровом арсенале.

В целом, метод GET является надежным и важным инструментом в цифровом пространстве, помогая нам эффективно и безопасно извлекать информацию.

Пример для HTTP-метода GET

Request header:
GET /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
Cache-Control: max-age=0
Response header:
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache