Изображения с сайта http на сайте https: смешанный режим

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

The code of method /api/misc/forward is following:

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


person P.K.    schedule 10.11.2016    source источник


Ответы (1)


Поскольку ваш код отправляет обратно перенаправление в другое место, поэтому, в конце концов, браузер все равно переходит к изображению HTTP.

Что происходит, так это то, что ваш браузер вызывает контроллер в HTTPS, затем действие контроллера отправляет обратно команду перенаправления в браузер, браузер извлекает изображение из нового местоположения, которое вы установили в файле response.Headers.Location.

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

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

person Haitham Shaddad    schedule 10.11.2016
comment
Да, я сделал это в первом решении, с кешем памяти, но я боялся, что это замедлит работу сервера, поэтому я решил изменить его :). После некоторых изменений я думал, что новая версия работает, но это не так :( - person P.K.; 10.11.2016
comment
Вы можете записывать файлы во временный каталог и обслуживать их позже напрямую с жесткого диска, также вы можете установить для него кэширование вывода, чтобы уменьшить количество обращений к веб-серверу, браузер будет кэшировать его и не будет запрашивать его с сервера. вообще. Это должно снять нагрузку с веб-сервера. - person Haitham Shaddad; 10.11.2016