Недавно я перешел с Apache на nginx, и у меня возникла такая же проблема. Все отлично работало при загрузке в виде простых файлов или с сервера Apache, но responseXML
всегда был нулевым при работе на nginx.
В моей конкретной ситуации также использовалась таблица стилей XSL для преобразования XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main-template-transformer.xsl"?>
Тип содержимого обычного файла XML возвращался просто отлично. Однако значение имело тип содержимого файла XSL. (Это было обнаружено путем проверки responseText
, который не был нулевым, и содержал весь текст файла XSL. Проверка заголовков HTTP в этом файле показала, что тип содержимого изменился между Apache и nginx.)
Тип содержимого должен быть text/xml
или application/xml
. Значение по умолчанию в nginx 1.10.3 - application/octet-stream
, и это приведет к тому, что responseXML
будет всегда нулевым.
Это можно исправить, добавив следующую строку в файл JavaScript:
xmlhttp.overrideMimeType('text/xml');
Это можно исправить, добавив следующую строку в конфигурацию сервера nginx в "conf / mime.types":
text/xml xsl;