Почему Chrome ищет мой файл favicon.ico, когда я подаю файл из ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1003350

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

return File(fileBytes, contentType);

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

HTTP/1.1 200 ОК
Управление кэшем:общественный
Тип содержимого:изображение/гиф
ETag:oYu19wKo+KEHkyxZQ2WXAA==
Сервер:Microsoft-IIS/7.0
Версия X-AspNetMvc:1.0
Версия X-AspNet:2.0.50727
X-Powered-By:АСП.НЕТ
Дата:Вт, 16 июня 2009 г., 18:48:45 GMT
Длина контента:29344

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

HTTP/1.1 200 ОК
Тип содержимого:изображение/гиф
Последнее изменение:Ср, 07 июня 2006 г., 19:42:34 GMT
Дата:Вт, 16 июня 2009 г., 18:50:54 GMT
Срок действия истекает:Ср, 16 июня 2010 г. 18:50:54 GMT
Управление кэшем:общедоступный, максимальный возраст = 31536000
Сервер:gws
Длина контента:8706
Возраст:2

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Вы можете добавить что-то подобное в свой файл 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

Вы должны установить заголовок Expires, чтобы сообщить браузеру, как долго он должен использовать свою локальную копию.

Если вы проверите настройки своего проекта, то где-нибудь появится значок по умолчанию. Удалить это?

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

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

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

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

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

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

 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top