Почему Chrome ищет мой favicon.ico, когда я обслуживаю файл из ASP.NET MVC? - PullRequest
14 голосов
/ 16 июня 2009

У меня есть контроллер в MVC, который подает изображения из базы данных.

РЕДАКТИРОВАТЬ: Это все еще происходит, если я подаю файл поверх полностью стандартных средств в MVC.

Каждый раз, когда я запрашиваю мое изображение, Google Chrome также ищет мой favicon.ico.

Чтобы избежать ненужных дискуссий о других вещах, «я должен также заботиться о», допустим, я не забочусь о кэшировании вообще вэтот пример и я всегда буду возвращать HTTP-ответ 200 с файлом.

В моем контроллере я возвращаю следующее:

return File(fileBytes, contentType);

После проверки Fiddler 2 генерируется следующий ответ:

HTTP / 1.1 200 OKCache-Control: общедоступныйТип контента: изображение / gifETag: oYu19wKo + KEHkyxZQ2WXAA ==Сервер: Microsoft-IIS / 7.0X-AspNetMvc-Version: 1.0X-AspNet-версия: 2.0.50727X-Powered-By: ASP.NETДата: вторник, 16 июня 2009 18:48:45 GMTДлина контента: 29344

Для сравнения, это ответ в Fiddler от Google, когда я запрашиваю (впервые) логотип Google:

HTTP / 1.1 200 OKТип контента: изображение / gifДата последнего изменения: ср, 07 июня 2006 19:42:34 GMTДата: вторник, 16 июня 2009 18:50:54 GMTИстекает: ср, 16 июня 2010 18:50:54 GMTCache-Control: общедоступный, max-age = 31536000Сервер: GWSДлина содержимого: 8706Возраст: 2

Однако в Chrome после получения моего изображения Chrome пытается найти мой favicon.ico. не пытается сделать это после запроса логотипа Google.

Есть идеи, почему это может происходить?Исходя из моего понимания HTML, ответ должен быть в заголовке ответа, потому что, конечно, это все, что должен делать клиент?Пожалуйста, поправьте меня!

РЕДАКТИРОВАТЬ 2: Кажется, многие люди совершенно не поняли проблему. Проблема в , а не в отсутствии фавиконов и запросов на ошибку в MVC - это проблема запроса фавиконов, когда загружается только изображение, с типом контента "IMAGE / JPEG", в отличие от веб-страницы с типом контента "TEXT / HTML" !!

Ответы [ 12 ]

7 голосов
/ 13 июля 2009

Это не имеет ничего общего с MVC. Я использую веб-формы со специально созданным сервисом журналов и наткнулся на этот пост, удивляясь, почему в моих журналах постоянно возникали ошибки «Файл не существует». Это локально на моей машине разработки, у меня нет файлов favicon.ico в моих проектах, и я пробовал IE, Firefox и Google, пытаясь определить, какой браузер является виновной стороной.

Каждый запрос от Google Chrome к моим приложениям делает запрос на favicon.ico . Мне пришлось начать регистрировать браузер локально, чтобы определить, что виновником является браузер Google. Я бы связался с Google, если это вас беспокоит. Я просто хотел убедиться, что это не какой-то новый троян, заражающий мой хром.

5 голосов
/ 20 апреля 2011

Фактический ответ: это известная, проверенная ошибка. * ( недавно исправлено! ... может быть?)

Похоже на известную давнюю проблему с Chrome: http://crbug.com/39402

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


**** ОБНОВЛЕНИЕ 1 ***: По состоянию на 15 мая этого года (2013) - через четыре года после того, как был задан этот вопрос - похоже, проблема была исправлена ​​в версии 29: http://crbug.com/39402#c47

Не стесняйтесь отменить все ваши взломы и обходные пути. :]

**** ОБНОВЛЕНИЕ 2 (2015-01) ***: По-видимому, эта проблема по-прежнему существует у некоторых пользователей по той же ссылке. : /

4 голосов
/ 17 июня 2009

одна вещь, которую вы могли бы сделать, это заставить MVC игнорировать любой запрос на * .ico, чтобы вы не получили никаких исключений при отладке.

Должно быть что-то вроде этого:

routes.MapRoute("ignore-favicon", "{*path}", null, new {path = ".*/favicon\\.ico"});

Этот шаблон URL соответствует всему, но затем мы ограничиваем его только тем, что заканчивается в favicon.ico. (Я не проверял это)

4 голосов
/ 16 июня 2009

У вас есть иконка? Если нет, возможно, именно поэтому Chrome пытается найти его каждый раз для вашего сайта. Для Google это уже имеет кэшированный значок.

2 голосов
/ 17 июня 2009

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

routes.IgnoreRoute("{*favicon}", new { favicon = ".*/favicon\\.ico" });

в метод RegisterRoutes в Global.asax.

1 голос
/ 06 декабря 2010

Мне кажется, что Chrome запрашивает значок для своих собственных вкладок - я продолжал получать 404 (потому что мой favicon где-то еще и мои страницы знают это), пока я не провел несколько тестов и не понял, что это Chrome, делающий прямые запросы к favicon файл. Нет реального исправления, кроме как переписать реальный файл, я думаю

1 голос
/ 14 декабря 2009

Вы можете добавить что-то подобное в файл web.config, чтобы убедиться, что favicon.ico кэшируется на клиенте и не запрашивается каждый раз.

<location path="favicon.ico">
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="public, max-age=31536000" />
             </customHeaders>
        </httpProtocol>
    </system.webServer>
</location>

Вы можете / должны сделать то же самое для любых файлов изображений / .js и css

0 голосов
/ 21 ноября 2009

Важно вставить ссылку ICON на вашу главную страницу, или некоторые браузеры будут пытаться найти favicon.ico для всех каталогов, а не только один раз для всех.

 <link rel="SHORTCUT ICON" href="<%= Url.Content("~/content/images/rr-favicon.ico") %>"/>

Судя по моим логам (и IE6, конечно), кажется, что панель инструментов Google - виновная сторона. Они оба будут делать запросы на каталоги, отличные от root

 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
 Mozilla/4.0 (compatible; GoogleToolbar 6.2.1910.1554; Windows 6.0; MSIE 8.0.6001.18828)
0 голосов
/ 13 июля 2009

Этот ТАК вопрос / ответ объясняет, как передать Favicon в браузер с помощью маршрутов.

0 голосов
/ 17 июня 2009

Браузер Chrome может работать с сайтом Google иначе, чем с любым другим сайтом, поэтому сначала я бы порекомендовал проверять, не ищет ли он favicon.ico каждый раз где-нибудь еще, например, в StackOverflow.

Я бы также проверил, делает ли Firefox то же самое с вашим сайтом. Я думаю, что favicon.ico следует запрашивать только один раз за запуск браузера, даже если он отсутствует на сайте. Это может быть ошибка в используемой вами версии Chrome.

...