15

データベースから画像を提供するMVCのコントローラーがあります。

編集:これは、MVCで完全に標準的な手段でファイルを提供する場合でも発生します。

画像をリクエストするたびに、GoogleChromeはfavicon.icoも検索します。

「私も気にする必要がある」という他のことについての不必要な議論を避けるために、この例ではキャッシュを気にしないと仮定し、ファイルとともに常にHTTP応答200を返します。

私のコントローラーでは、次を返します。

return File(fileBytes, contentType);

Fiddler 2を検査した後、次の応答が生成されます。

HTTP / 1.1 200 OK
Cache-Control:public
Content-Type:image / gif
ETag:oYu19wKo + KEHkyxZQ2WXAA ==
Server:Microsoft-IIS / 7.0
X-AspNetMvc-Version:1.0
X-AspNet-Version:2.0.50727
X-Powered -作成者:ASP.NET
日付:2009年6月16日火曜日18:48:45 GMT
コンテンツ-長さ:29344

比較すると、これは私が(初めて)Googleロゴを要求したときのGoogleからのFiddlerでの応答です。

HTTP / 1.1 200 OK
コンテンツタイプ:image / gif
最終更新日:2006年6月7日水曜日19:42:34 GMT
日付:2009年6月16日火曜日18:50:54 GMT
有効期限:2010年6月16日水曜日18:50 :54 GMT
Cache-Control:public、max-age = 31536000
Server:gws
Content-Length:8706
Age:2

ただし、Chromeでは、画像を取得した後、Chromeは私のfavicon.icoを見つけようとします。Googleロゴをリクエストした後はこれを試しません。

なぜこれが起こっているのか考えはありますか?HTMLについての私の理解から、答えは応答ヘッダーになければなりません。確かにそれがクライアントが続けなければならないすべてだからですか?訂正してください!

編集2:多くの人が問題を完全に誤解しているようです。問題は、ファビコンの欠如とMVCでのエラー要求ではなく、コンテンツを含むWebページではなく、コンテンツタイプが「IMAGE/JPEG」の画像のみが読み込まれているときにファビコンを要求する問題です「TEXT/HTML」のタイプ!!

4

12 に答える 12

8

これはMVCとは何の関係もありません。カスタムビルドのログサービスでWebフォームを使用していますが、ログに「ファイルが存在しません」というエラーが継続的に発生する理由を疑問に思って、この投稿に遭遇しました。これは私の開発マシンにローカルにあり、プロジェクトにfavicon.icoファイルがありません。また、IE、Firefox、およびGoogleを試して、どのブラウザーが有罪であるかを確認しました。

Google Chromeから私のアプリへのすべてのリクエストは、favicon.icoをリクエストします。犯人が実際にグーグルブラウザであると判断するために、ローカルでブラウザのロギングを開始する必要がありました。気になる場合はグーグルに連絡します。クロームに感染している新しいトロイの木馬ではないことを確認したかっただけです。

于 2009-07-13T12:50:10.567 に答える
6

実際の答え:これは既知の検証済みのバグです。*(最近修正されました!...多分?)

Chromeの既知の長年の問題のようです:http: //crbug.com/39402

もっと早く修正したい場合は、問題にスターを付けてください。この問題を主演する人が増えると、優先度が上がり、修正が早くなる可能性があります。


****更新1***:今年(2013年)の5月15日現在(この質問が行われてから4年後)、この問題はバージョン29で修正されたようです:http: //crbug.com / 39402#c47

すべてのハックと回避策を自由に元に戻してください。:]

****更新2(2015-01)***:同じ問題のリンクによると、これは一部のユーザーにとってはまだ問題であるようです。:/

于 2011-04-20T19:54:22.000 に答える
4

ファビコンはありますか?そうでない場合は、おそらくそれがChromeがあなたのウェブサイトのために毎回それを見つけようとしている理由です。グーグルの場合、ファビコンはすでにキャッシュされています。

于 2009-06-16T19:29:44.807 に答える
4

実行できることの1つは、MVCに* .icoの要求を無視させて、デバッグ中に例外が発生しないようにすることです。

次のようになります。

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

そのURLパターンはすべてに一致しますが、favicon.icoで終わるものにのみ一致するように制約します。(私はこれをテストしていません)

于 2009-06-17T06:25:33.883 に答える
2

私はしばらく前にこの問題に遭遇し、追加して特定のルートを無視することで問題を回避しました

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

Global.asaxのRegisterRoutesメソッドに追加します。

于 2009-06-17T06:29:48.697 に答える
1

このようなものを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ファイルに対しても同じことをすることができます/すべきです

于 2009-12-14T13:46:55.970 に答える
1

Chromeが独自のタブのファビコンを要求しているように見えます-いくつかのテストを行ってChromeがファビコンファイルに直接要求していることに気付くまで、404を取得し続けました(私のファビコンは他の場所にあり、私のページはそれを知っているため)。私が推測する実際のファイルに書き直す以外に実際の修正はありません

于 2010-12-06T03:38:11.450 に答える
0

Expiresヘッダーを設定して、ローカルコピーを使用する期間をブラウザーに通知する必要があります。

于 2009-06-16T19:34:52.533 に答える
0

プロジェクトの設定を確認すると、どこかにデフォルトのアイコンが表示されます。それを削除しますか?

于 2009-06-16T19:37:33.107 に答える
0

このSOの質問/回答では、ルートを使用してファビコンをブラウザに提供する方法について説明します。

于 2009-07-13T12:55:17.090 に答える
0

Chromeブラウザは他のサイトとは別の方法でGoogleサイトと連携する可能性があるため、最初は、StackOverflowなど、他の場所で毎回favicon.icoを検索するかどうかを確認することをお勧めします。

Firefoxがあなたのサイトでも同じことをするかどうかもチェックします。favicon.icoは、サイトに存在しない場合でも、ブラウザーの実行ごとに1回だけ要求する必要があると思います。これは、使用しているChromeバージョンのバグである可能性があります。

于 2009-06-17T05:54:01.017 に答える
0

マスターページにICONリンクを挿入することが重要です。そうしないと、一部のブラウザは、グローバルに1回だけでなく、すべてのディレクトリのfavicon.icoを検索しようとします。

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

私のログ(そしてもちろんIE6)から判断すると、グーグルツールバーは有罪の当事者のようです。どちらもルート以外のディレクトリを要求します

 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)
于 2009-11-21T05:44:20.927 に答える