Запросы поиска Xhr возвращают 406

При поиске на нашем сайте на базе Discourse обычный GET-запрос к /search?q=my search выполняется без проблем. Однако при использовании поля поиска, которое отправляет запрос через XHR GET, возвращается статус 406.

После дополнительных тестов с помощью Postman я обнаружил, что добавление заголовка X-Requested-With: XMLHttpRequest к запросу вызывает эту проблему. Если убрать этот заголовок, всё работает нормально. Сервер находится за Azure Front Door, и при обходе этого шлюза и прямом обращении к серверу проблема не возникает. Возможно, nginx или модуль поиска выполняют какие-то специальные действия на основе этого заголовка? Может ли обратный прокси-сервер влиять на это? Есть ли идеи, как это исправить?

Ваш обратный прокси-сервер никогда не должен отбрасывать заголовки, установленные нашим клиентским приложением. Это может привести как к очевидным ошибкам, так и к скрытым проблемам, о которых вы узнаете слишком поздно.

Я предполагаю, что заголовок не отбрасывается, учитывая, что другие XHR-запросы работают нормально. Похоже, что этот запрос somehow отличается от других в Discourse.

Можете ли вы воспроизвести эту же ошибку здесь, в Meta?

Нет, потому что вы не за дверью. Проблема возникает из-за прокси-сервера, но я не понимаю почему, учитывая, что другие XHR-запросы работают нормально. Это наводит на мысль, что запросы, отправляемые на поиск, обрабатываются Discourse иначе, чем другие XHR-запросы.

Meta работает за обратным прокси-сервером AWS ALB, и у неё этой проблемы нет.

Try работает за обратным прокси-сервером HAProxy, и у него этой проблемы нет.

Большинство самостоятельно размещённых экземпляров имеют только внутренний обратный прокси-сервер nginx, и у них этой проблемы тоже нет.

Это заставляет меня заподозрить Azure Front Door. Это не первый раз, когда продукт Azure ведёт себя странным и нерабочим образом.

У нас также есть опыт работы с другими продуктами WAF, которые нарушают работу Discourse, поэтому они не поддерживаются.

Я не использую функциональность WAF. Посмотрю, смогу ли я выяснить что-то ещё, например, не отбрасывает ли он каким-то образом заголовки или что-то в этом роде. Просто странно, что это влияет только на поисковые запросы.

Другой продукт WAF, который я отлаживал в прошлом месяце, также ломал сохранение заготовленных ответов и черновиков. Когда он ломает менее часто используемые функции, может потребоваться некоторое время, чтобы найти все несовместимости.

Я провел дополнительные тесты, и, похоже, FD некорректно передаёт как минимум этот HTTP-заголовок. Я уже отправил им запрос на исправление. До сих пор неясно, почему поиск обращает внимание на этот заголовок, но, думаю, лучше исправить ошибку в FD.

Мы, как правило, рекомендуем отказываться от сложных конфигураций, если у вас (по какой-либо причине) нет жестко зафиксированных требований, которые их требуют. И в тех редких случаях, когда такие требования всё же существуют, мы надеемся, что вы также предусмотрели бюджет на оплату услуг экспертов для управления этой необходимой сложностью.