Как передать данные с помощью HTTP GET-запроса?

«Как передать данные с помощью HTTP GET-запроса?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, данные в GET-запросе передаются через строку запроса (query string) в URL.

Синтаксис:

http(s)://<хост>[:порт]/<путь>?<параметр1>=<значение1>&<параметр2>=<значение2>

Пример URL с данными:

https://api.shop.com/products?category=electronics&sort=price&page=2

Пример создания GET-запроса с параметрами в Java 11+:

import java.net.URI;
import java.net.http.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class GetExample {
    public static void main(String[] args) throws Exception {
        String baseUrl = "https://api.shop.com/products";
        // Формируем строку параметров с кодированием
        String queryString = "category=" + URLEncoder.encode("home & garden", StandardCharsets.UTF_8) +
                            "&page=1";

        URI fullUri = URI.create(baseUrl + "?" + queryString);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(fullUri)
                .GET()
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

Характеристики и ограничения GET:

  • Видимость: Все параметры отображаются в URL, истории браузера и логах сервера.
  • Длина: Ограничена длиной URL, поддерживаемой клиентом и сервером.
  • Кэширование: Ответы на GET-запросы могут кэшироваться.
  • Идемпотентность: GET является идемпотентным и безопасным методом (не должен изменять состояние сервера).

Когда использовать GET: Для запросов данных, поиска, фильтрации — операций, где параметры задают критерии выборки, а не изменяют ресурсы.