Персональная страница Антона Драчёва

История про IE, AJAX, PHP и nginx

Преамбула

Совсем недавно, в одном из проектов мне пришлось общаться из javascript-приложения с бэкендом на PHP. А сервером был nginx. Приложение представляло из себя чат (пародию на instant messenger).

Проявление проблемы

Ошибка проявляется в неработоспособности скриптов в IE (если вы используете catch-try) или в появлении ошибки c00ce56e.

На моей машине скрипт работал превосходно (тестовый бэкенд связывал чат с jabber’ом, и был на asp.net), однако в «продуктиве» он по непонятным причинам отказывался работать с ie, хотя в других браузерах работал отлично.

Дальше я наставил отладочных alert’ов по всему скрипту. И обнаружил, что iexplore жалуется на некую ошибку c00ce56e. Полез в гугл, но готового решения не обнаружил. Зато сразу стало понятно, что что-то не так с кодировкой.

Далее я внимательно рассмотрел весь ответ сервера на наличие левых символов, но опять же ничего необычного. Я уже почти отчаялся, но вдруг моё внимание привлекла строчка utf8. Потом я открыл самый важный документ про кодировки и не обнаружил там даже упоминания utf8!

Зато нашёл очень поучительную запись:

Name: UTF-8
MIBenum: 106
Source: RFC 3629
Alias: None

Ощибку эту вызывает Microsoft XML parser, который просто не в курсе что делать с идентификатором utf8, и к сожалению, выдаёт ошибку.

Решение проблемы

Решается эта проблема очень просто:
Надо во всех конфигах прописать название кодировки utf-8 а не utf8. Если нет тако возможности, то в выводящем результаты скрипте надо поставить соответствующий заголовок (например Content-Type: text/plain; charset=utf-8).