HTTP-спецификация на самом деле советует использовать POST при отправке данных на ресурс для вычисления.
Ваш поиск выглядит как вычисление, а не как ресурс. Если вы все еще хотите, чтобы результаты поиска были ресурсом, создайте токен, который идентифицирует этот конкретный результат поиска и перенаправит пользовательский агент на этот ресурс.
После некоторого промежутка времени вы можете удалить токены результатов поиска.
Пример
POST /search
query=something&category=c1&category=c2&...
201 Created
Location: /search/01543164876
тогда
GET /search/01543164876
200 Ok
... your results here...
Таким образом, браузеры и прокси могут по-прежнему кэшировать результаты поиска, но вы отправляете параметры запроса с помощью POST.
РЕДАКТИРОВАТЬ
Для пояснения, 01543164876
здесь представляет уникальный идентификатор ресурса, представляющего ваш поиск. Эти 2 запроса в основном означают: создать новый поисковый объект с этими критериями, а затем получить результаты, связанные с созданным поисковым объектом.
Этот идентификатор может быть уникальным идентификатором, сгенерированным для каждого нового запроса. Это будет означать, что ваш сервер будет пропускать «поисковые» объекты, и вам придется регулярно очищать их с помощью стратегии кэширования.
Или это может быть хэш всех критериев поиска, фактически представляющих запрос, заданный пользователем. Это позволяет повторно использовать идентификаторы, поскольку при повторном поиске будет возвращаться существующий идентификатор, который может (или не может) быть уже кэширован.