С завидной периодичностью в блоге разработчиков браузера Опера появляются сообщения, что Опера не может распарсить ту или иную страницу и пользователь видит примерно такую ошибку:
Эффект можно посмотреть по любой из этих ссылок. При этом, в других популярных браузерах страницы отображаются нормально, так же как и в Опере, если попросить распарсить документ как HTML, а не как XML (ссылка «Reparse document as HTML»).
В какой-то момент мне стало интересно, почему так происходит. Вариантов не много, либо Опера не может распарсить XML, который могут распарсить другие браузеры, либо другие браузеры и не пытаются парсить страниц как XML, а считают, что это HTML. Долго искать причину не пришлось, дело оказалось в ответе сервера:
Получается, сервер просто «врет» некоторым браузерам. При этом точно можно сказать, что принимает решение он только лишь на основе строки User-Agent. Если, например, в Опере поставить в свойствах сайта Browser identification как Интернет Эксплорер, или Фаерфокс, страницы начинают чудесным образом открываться. Верно и обратное, если в Сафари задать юзерагент как «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU)», то ему тоже будет выдаваться контент якобы application/xhtml+xml, и он тоже не сможет его распарсить:
Получается, что страдает не только Опера, а любой другой браузер, не опознанный как «свой».
Все осмотренные сайты с этой ошибкой объединяет одна вещь — они написаны на ASP.NET 2.0. Мне не известно, является ли это ошибкой команды Microsoft, или это дело рук доморощенных администраторов таких сайтов (всеже, не абсолютно все сайты, написанные на ASP.NET 2.0 страдают такой фигней). Хочу лишь дать совет разработчикам, который я написал в заголовке.
А пользователям можно посоветовать только менять юзерагент для таких сайтов. В той же Опере это можно сделать на вкладке Network в свойствах сломанного сайта.
Эффект можно посмотреть по любой из этих ссылок. При этом, в других популярных браузерах страницы отображаются нормально, так же как и в Опере, если попросить распарсить документ как HTML, а не как XML (ссылка «Reparse document as HTML»).
В какой-то момент мне стало интересно, почему так происходит. Вариантов не много, либо Опера не может распарсить XML, который могут распарсить другие браузеры, либо другие браузеры и не пытаются парсить страниц как XML, а считают, что это HTML. Долго искать причину не пришлось, дело оказалось в ответе сервера:
Ответ Опере |
Ответ Фаерфоксу |
Получается, что страдает не только Опера, а любой другой браузер, не опознанный как «свой».
Все осмотренные сайты с этой ошибкой объединяет одна вещь — они написаны на ASP.NET 2.0. Мне не известно, является ли это ошибкой команды Microsoft, или это дело рук доморощенных администраторов таких сайтов (всеже, не абсолютно все сайты, написанные на ASP.NET 2.0 страдают такой фигней). Хочу лишь дать совет разработчикам, который я написал в заголовке.
А пользователям можно посоветовать только менять юзерагент для таких сайтов. В той же Опере это можно сделать на вкладке Network в свойствах сломанного сайта.