2016-11-10 4 views
0

Мой сайт на основе https (сайт A) использует образы с http-сайта B. Я вызываю ошибку смешанного содержимого. Чтобы исправить это, я нашел решение поменять каждую внешнюю ссылку, например http://www.siteB.com/imageX.png, с моим методом контроллера, который пересылает внешнее изображение. Новый формат ссылки:Изображения с http сайта на сайте https: смешанный режим

код метода /api/misc/forward заключается в следующем:

[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.

Другим подходом было бы просто скопировать изображения на ваш сайт.

+0

Да, я сделал это в первом решении с кешем памяти, но я был уверен, что это замедлит работу сервера, поэтому я решил изменить его :). После некоторых изменений я подумал, что новая версия сработала, но она didnt :( –

+0

Вы можете записать файлы в каталог temp и выполнить его позже с жесткого диска напрямую, также вы можете установить выходное кэширование для его сокращения количества обращений в Интернете сервер, браузер будет кэшировать его и не будет запрашивать его с сервера вообще. Это должно устранить любую нагрузку на веб-сервер –