2016-11-10 3 views
0

httpsベースのサイト(サイトA)は、httpベースのサイトBの画像を使用します。混合コンテンツエラーが発生します。この問題を解決するには、外部の画像に転送するコントローラメソッドでhttp://www.siteB.com/imageX.pngのような各外部リンクを交換するソリューションが見つかりました。方法/api/misc/forwardのコードは以下の通りですhttpsサイトのhttpサイトの画像:混合モード

:新しいリンクの形式がある

[HttpGet] 
    public async Task<HttpResponseMessage> Forward(string url) 
    { 
     HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); 

     try 
     { 

      var response = Request.CreateResponse(HttpStatusCode.Found); 
      response.Headers.Location = new Uri(HttpUtility.UrlDecode(url)); 
      return response; 
     } 
     catch (Exception ex) 
     { 
      httpResponseMessage.StatusCode = HttpStatusCode.NotFound; 
      _loggerService.LogException(ex, url); 
     } 

     return httpResponseMessage; 
    } 

が、ブラウザがまだなぜ....混合モードとして、それを認識することができますか? 元の画像リンクは、httpsベースのサイトからブラウザの原点に送信されました。

クイックヒントはありますか?私はサイトBからのすべての画像をキャッシュしたくありません:)。

答えて

1

コードが別の場所にリダイレクトを返すため、最終的にブラウザはHTTPイメージに移動します。

ブラウザがHTTPSでコントローラを呼び出し、コントローラのアクションがブラウザにリダイレクトコマンドを返した場合、ブラウザはresponse.Headers.Locationで設定した新しい場所からイメージを取得します。

混在モードを回避するには、コントローラーからイメージを取得し、アクションからFileResultを戻す必要があります。この方法では、ブラウザーはHTTPサイトにアクセスする必要はありません。

もう1つの方法は、画像をあなたのサイトにコピーすることです。

+0

はい、私は最初の解決策でメモリキャッシュを使用しましたが、サーバーの速度が遅くなることに敬意を表していましたので、変更することにしました:)いくつかの変更の後、私は新しいバージョンが動作したと思ったが、それはなかった:( –

+0

あなたはtempディレクトリにファイルを書き込んで、後でハードディスクから直接提供することができます。また、出力キャッシュを設定して、サーバーはキャッシュして、サーバーからまったく要求しません。これにより、Webサーバーの負担がなくなります –

関連する問題