При поиске на нашем сайте на базе Discourse обычный GET-запрос к /search?q=my search выполняется без проблем. Однако при использовании поля поиска, которое отправляет запрос через XHR GET, возвращается статус 406.
После дополнительных тестов с помощью Postman я обнаружил, что добавление заголовка X-Requested-With: XMLHttpRequest к запросу вызывает эту проблему. Если убрать этот заголовок, всё работает нормально. Сервер находится за Azure Front Door, и при обходе этого шлюза и прямом обращении к серверу проблема не возникает. Возможно, nginx или модуль поиска выполняют какие-то специальные действия на основе этого заголовка? Может ли обратный прокси-сервер влиять на это? Есть ли идеи, как это исправить?
Ваш обратный прокси-сервер никогда не должен отбрасывать заголовки, установленные нашим клиентским приложением. Это может привести как к очевидным ошибкам, так и к скрытым проблемам, о которых вы узнаете слишком поздно.
Я предполагаю, что заголовок не отбрасывается, учитывая, что другие XHR-запросы работают нормально. Похоже, что этот запрос somehow отличается от других в Discourse.
Нет, потому что вы не за дверью. Проблема возникает из-за прокси-сервера, но я не понимаю почему, учитывая, что другие XHR-запросы работают нормально. Это наводит на мысль, что запросы, отправляемые на поиск, обрабатываются Discourse иначе, чем другие XHR-запросы.
Я не использую функциональность WAF. Посмотрю, смогу ли я выяснить что-то ещё, например, не отбрасывает ли он каким-то образом заголовки или что-то в этом роде. Просто странно, что это влияет только на поисковые запросы.
Другой продукт WAF, который я отлаживал в прошлом месяце, также ломал сохранение заготовленных ответов и черновиков. Когда он ломает менее часто используемые функции, может потребоваться некоторое время, чтобы найти все несовместимости.
Я провел дополнительные тесты, и, похоже, FD некорректно передаёт как минимум этот HTTP-заголовок. Я уже отправил им запрос на исправление. До сих пор неясно, почему поиск обращает внимание на этот заголовок, но, думаю, лучше исправить ошибку в FD.
Мы, как правило, рекомендуем отказываться от сложных конфигураций, если у вас (по какой-либо причине) нет жестко зафиксированных требований, которые их требуют. И в тех редких случаях, когда такие требования всё же существуют, мы надеемся, что вы также предусмотрели бюджет на оплату услуг экспертов для управления этой необходимой сложностью.