Quando esegui una ricerca sul nostro sito Discourse, se invio una normale richiesta GET a /search?q=la mia ricerca funziona correttamente. Ma se uso la casella di ricerca e invia la richiesta di ricerca tramite una richiesta GET XHR, ricevo un ritorno con stato 406.
Dopo ulteriori test con Postman, ho scoperto che aggiungere semplicemente l’intestazione X-Requested-With: XMLHttpRequest alla richiesta la interrompe. Rimuovendo quell’unica intestazione, funziona di nuovo. Il server si trova dietro Azure Front Door e bypassandolo, colpendo direttamente il server, questo problema non si presenta. Nginx o la ricerca fanno qualcosa di speciale in base a quell’intestazione? Potrebbe essere un problema causato dal fatto di essere dietro un proxy inverso? Qualche idea su come risolvere?
Il tuo reverse proxy non dovrebbe mai eliminare gli header impostati dalla nostra applicazione client. Questo potrebbe causare bug evidenti, ma anche errori silenziosi che scoprirai solo quando sarà troppo tardi.
Presumo che non stia eliminando l’intestazione, dato che altre richieste XHR funzionano correttamente. Sembra che questa in qualche modo sia diversa dalle altre in Discourse.
No, perché non sei dietro la porta principale. Il problema è causato dal passaggio attraverso il proxy; non so solo il motivo, dato che altre richieste XHR funzionano correttamente. Questo suggerisce che le richieste inviate al motore di ricerca vengono gestite in modo diverso da Discourse rispetto alle altre richieste XHR.
Non sto utilizzando la funzionalità WAF. Verificherò se riesco a determinare ulteriori dettagli, ad esempio se in qualche modo sta eliminando gli header o altro. Sembra strano che colpisca solo le richieste di ricerca.
Un altro prodotto WAF che ho analizzato il mese scorso stava causando problemi anche alle risposte predefinite e al salvataggio delle bozze. Quando interrompe funzionalità meno utilizzate, può volerci del tempo per individuare tutte le incompatibilità.
Ho effettuato ulteriori test e sembra che FD stia passando in modo errato almeno questa intestazione HTTP. Ho inviato una richiesta per risolvere il problema. Non sono ancora sicuro del motivo per cui la ricerca tenga conto di questa intestazione, ma credo sia meglio risolvere il bug di FD.
In genere consigliamo alle persone di evitare configurazioni complesse, a meno che non abbiano requisiti vincolanti che le richiedano. E in quei rari casi, speriamo che abbiano anche stanziato un budget per assumere esperti in grado di gestire tale complessità necessaria.