Legen Sie Bilder auf CDN, mit MVC3 auf IIS7

8

Ich muss CDN für alle Bilder auf meiner Website verwenden. Also habe ich mich entschieden, das IIS Url-Rewriting-Modul zu verwenden, weil alle meine Site-Ansichten manuell bearbeitet werden - das ist unmöglich für mich.

Also habe ich Regeln für IIS gemacht, zB:

%Vor%

Es hat funktioniert, aber wie Sie sehen können, wird der Redirect-Typ verwendet (301 Permanent). Und ich denke, es beeinflusst die Leistung der Website. Vielleicht ist es möglich, Request.Output zu bearbeiten, um die Bild-URL zu ersetzen?

Bitte beachten Sie, wie kann ich CDN für Bilder verwenden, meine Ansichten nicht bearbeiten und Umleitungen vermeiden?

Jede Hilfe wird geschätzt

    
bogert 31.07.2011, 22:07
quelle

2 Antworten

7

Ich stimme Steve zu. Sie haben den URL-Rewriter, der 301-Redirects ausführt, aber für jedes Bild, das die Seite benötigt, stellt der Browser immer noch eine Anfrage an den Server, um zuerst festzustellen, dass er auf eine CDN-URL umgeleitet wurde. Das einzige, was Sie zu diesem Zeitpunkt speichern, ist das Herunterladen des Inhalts.

Statt dies zu tun, können Sie einfach einen Antwortfilter einsetzen, der die URLs der Assets vor dem Senden der Antwort an den Client-Browser ändert. Auf diese Weise muss der Client-Browser niemals statische Ressourcen auf dem Server aufrufen:

%Vor%

Und dann der CdnResponseFilter:

%Vor%

Das führt dazu, dass alle Inhaltsressourcen, die wie <img src="\Content\whatever.jpg" /> aussehen, in <img src="cdn-url.com\Content\whatever.jpg" />

konvertiert werden     
Mike Richards 31.07.2011, 22:37
quelle
1

Da die ursprünglichen URLs aus Ihren Inhalten stammen und nicht etwa aus Lesezeichen, haben Sie wahrscheinlich Probleme, eine Anfrage an Ihre Site und eine Weiterleitung zu vermeiden. eine möglicherweise erhebliche Auswirkung auf die Leistung, die die Vorteile der Verwendung eines CDN negieren könnte.

Es wäre besser, wenn Sie das URL-Rewriting auf den HTML-Code anwenden könnten, der an den Browser gesendet wird, anstatt auf eine Anfrage.

Das Problem ist, ich weiß nicht wie (außer Sie verwenden ISA Server, in diesem Fall könnte ich Ihnen sagen, aber ich vermute, dass Sie nicht sind)!

Sie könnten einen benutzerdefinierten ActionFilter erstellen und OnResultExecuted überschreiben, aber Sie müssten Ihren Controller mit dem Filterattribut annotieren.

    
Steve Morgan 31.07.2011 22:12
quelle