Можно ли передать один и тот же параметр несколько раз в HTTP-запросе?

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

Ответ

Да, в HTTP-запросе можно передать несколько значений для одного имени параметра. Поведение сервера при обработке таких параметров зависит от его реализации.

Как это выглядит в запросе:

GET /api/search?filter=category&filter=price&filter=date
POST /api/submit (body: name=John&name=Jane)

Как обрабатывается на стороне сервера (примеры):

  1. Spring Framework (Java): Автоматически собирает значения в массив или список.
    @GetMapping("/search")
    public void handleRequest(@RequestParam("filter") List<String> filters) {
        // filters = ["category", "price", "date"]
    }
  2. Servlet API (Java): Возвращает только первое значение по умолчанию. Чтобы получить все, нужно использовать getParameterValues().
    String[] filters = request.getParameterValues("filter"); // Массив всех значений
  3. Node.js (Express): Предоставляет массив значений.
    app.get('/api/search', (req, res) => {
        console.log(req.query.filter); // ['category', 'price', 'date']
    });

Практическое применение: Используется для передачи множественных значений, например, ID выбранных элементов, тегов или фильтров.