PHP

Особенности браузера Chrome

Chrome хороший браузер, однако веб-разработчики могут столкнуться с несколькими проблемами при работе с ним. Вы когда-нибудь замечали, что счетчик в сессии увеличивается не на одно значение, а сразу на несколько при обновлении страницы? У вас было ощущение, что почему-то выполняется не один, а два запроса к странице? Тогда прошу под кат.

Я сталкивался с двумя проблемами этого браузера.

Проблема 1.

Chrome при каждом запросе страницы запрашивает еще и файл иконки favicon.ico. Такое поведение присуще не только chrome, но и еще нескольким браузерам. Если вы раньше пользовались

Mozilla Firefox, то, вероятно, не знали проблем. Этот браузер не делает таких скрытых действий;)

Обычный конфиг реврайта выглядит следующим образом (пример взят для Zend Framework).

SetEnv APPLICATION_ENV production

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]


Если иконки у вас не обнаружится, то приложение отработает 2 раза.

Решение:

1. Самый простой способ – это положить иконку в корень сайта.

2. Обрабатывать запросы к favicon.ico. Например, можно добавить следующий код для реврайта

RewriteCond %{REQUEST_FILENAME} ^.*ico$ [NC]
RewriteRule ^.*$ - [NC,L]


Проблема 2.

Кроме запроса к favicon.ico Chrome делает еще одну подлянку, он отправляет вместе с GET еще и HEAD запрос. И мы снова наступаем на те же грабли, что и в случае c favicon.ico.

Почему это происходит?

Когда вы вбиваете какое-либо слово в строку поиска, Chrome выполняет dns запрос, чтобы понять является ли искомое слово реальным доменом или нет.

Это своего рода защита от подмены DNS.

Как бороться:

Способ 1.

Экстремальный способ – заблочить этот тип запросов.

Для nginx

if ($request_method ~ ^HEAD$ ) {
  return 405;
}


Для Apache

RewriteEngine on
RewriteCond %{REQUEST_METHOD} =HEAD
RewriteRule .* - [F]


Способ 2.

Обрабатывать такие запросы на программном уровне лишь для тех действий, где это критично.

if($_SERVER['REQUEST_METHOD'] == 'HEAD') {
   return;
}
Теги:
Chrome, favicon.ico
Добавлено: 16 Февраля 2015 20:59:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...