Назад | Перейти на главную страницу

Почему браузер при медленном соединении показывает необработанный HTML (вместо его интерпретации)?

У меня есть несколько сообщений о людях, которые видят необработанный HTML в своем браузере (вместо того, чтобы его интерпретировать его браузером). Похоже, это происходит на медленных соединениях. Когда это происходит, если пользователь перезагружает страницу, страница интерпретируется правильно. Есть ли какие-то специфические для сервера вещи, которые могут вызвать это? Мы используем Php 5.1.6 и Apache 2.2.3.

На ум сразу приходят два возможных сценария:

  1. Под «необработанным html», если вы имеете в виду «интерпретируемый, но не стилизованный», то это чаще всего происходит со страницами, которые разработаны строго с использованием CSS для выполнения всех стилей, потому что таблица стилей загружается только после загрузки html. Что вы можете попробовать, так это встроить некоторые очень простые стили в раздел заголовка html, что, по крайней мере, будет означать, что страница будет выглядеть «приемлемой», пока не будет загружен оставшийся код таблицы стилей. И если таблица стилей никогда не доходит до клиента при первой загрузке, даже после терпеливого ожидания, вы можете увеличить время ожидания соединения, что может препятствовать загрузке всех файлов для правильного отображения страницы.

  2. Под «сырым html» вы на самом деле имеете в виду «неинтерпретированный, нестилизованный простой текст с видимыми! DOCTYPE и тегами html», тогда это может быть еще более хронический случай того, что я описал выше, или что ваш PHP-скрипт может быть настроен на очистку буфер ответа клиенту до того, как HTML будет полностью сгенерирован (однако даже в этом случае большинство браузеров все равно предпримут разумные попытки интерпретировать HTML).

Я буду спать на нем, и если еще какие-то идеи придут в голову, прежде чем кто-то другой придет к чему-то более конкретному, я соответствующим образом обновлю свой ответ

Обычная причина такой проблемы, которую я видел при работе с Drupal, использующим PHP, - это сообщение об ошибке, которое происходит и выводится раньше, чем <!DOCTYPE html> или <html> написано в выводе. Тогда браузер, скорее всего, интерпретирует вывод как простой текст, поскольку он не увидел тег с символами X в начале документа. (Обычно он с радостью пропускает определенный объем данных, я видел RSS-канал, который начинался бы с того, что выглядело бы как 2 случайных байта, первый мог быть даже нулевым, а Firefox все еще был счастлив, он просто игнорировал эти байты !)

Одно из решений, позволяющих избежать этой проблемы (при условии, что это проблема) - убедиться, что ваша производственная среда не выводит ошибки PHP в выходной буфер. В php.ini есть настройки, хотя знайте, что их можно переопределить в PHP-коде:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);