Las solicitudes de búsqueda Xhr devuelven 406

Al realizar una búsqueda en nuestro sitio de Discourse, si hago una solicitud GET regular a /search?q=mi búsqueda, funciona correctamente. Pero si uso el cuadro de búsqueda y este envía la solicitud de búsqueda mediante una solicitud GET XHR, recibo un código de estado 406.

Después de algunas pruebas adicionales con Postman, descubrí que simplemente agregar un encabezado X-Requested-With: XMLHttpRequest a la solicitud lo rompe. Si eliminas ese encabezado, funciona correctamente. El servidor está detrás de Azure Front Door y al omitirlo y acceder directamente al servidor, este problema no ocurre. ¿Está nginx o la búsqueda haciendo algo especial basado en ese encabezado? ¿Podría ser que estar detrás de un proxy inverso interfiera? ¿Alguna idea sobre cómo solucionarlo?

Tu proxy inverso nunca debería descartar ningún encabezado que establezca nuestra aplicación cliente. Esto puede provocar errores obvios, pero también errores silenciosos que no descubrirás hasta que sea demasiado tarde.

Asumo que no está eliminando la cabecera, ya que otras solicitudes XHR funcionan correctamente. Parece que esta en particular es de alguna manera diferente a las demás en Discourse.

¿Puedes reproducir este mismo error aquí en Meta?

No, porque no estás detrás de la puerta principal. El problema es causado por el hecho de que pasa a través del proxy; simplemente no sé por qué, dado que otras solicitudes XHR funcionan bien. Esto sugiere que las solicitudes enviadas a la búsqueda son manejadas de manera diferente por Discourse en comparación con otras solicitudes XHR.

Meta se ejecuta detrás de un proxy inverso AWS ALB y no presenta este problema.

Try se ejecuta detrás de un proxy inverso HAProxy y no presenta este problema.

La mayoría de las instancias autohospedadas solo tienen el proxy inverso nginx interno y tampoco presentan este problema.

Esto me lleva a sospechar de Azure Front Door. No será la primera vez que un producto de Azure tenga comportamiento extraño y defectuoso.

También tenemos experiencia con otros productos WAF que rompen Discourse, por lo que no son compatibles.

No estoy utilizando la funcionalidad de WAF. Veré si puedo determinar algo más en cuanto a si de alguna otra manera está descartando encabezados o algo similar. Solo parece extraño que solo afecte a las solicitudes de búsqueda.

Otro producto WAF que estuve depurando el mes pasado también estaba rompiendo las respuestas predefinidas y el guardado de borradores. Cuando afecta a funciones menos utilizadas, puede llevar un tiempo identificar todas las incompatibilidades.

He realizado más pruebas y parece que FD está pasando incorrectamente al menos esta cabecera HTTP. He enviado una solicitud a su equipo para que lo corrijan. Aún no estoy seguro de por qué la búsqueda se preocupa por esta cabecera, pero supongo que es mejor solucionar el error de FD.

Generalmente recomendamos que las personas eviten configuraciones complejas, a menos que tengan requisitos inamovibles que las exijan. Y en esos casos poco frecuentes, esperamos que también hayan asignado el presupuesto necesario para contratar expertos que ayuden a gestionar esa complejidad requerida.