来自https网站上的http站点的图像:混合模式

时间:2016-11-10 05:52:20

标签: c# asp.net-mvc-4 mixed-content

我的基于https的站点(站点A)使用来自基于http的站点B的图像。我导致混合内容错误。为了解决这个问题,我找到了解决方案来交换每个外部链接,如http://www.siteB.com/imageX.png和我的控制器方法,它转发到外部图像。新的链接格式为:

方法/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 个答案:

答案 0 :(得分:1)

因为您的代码会将重定向发送回另一个位置,所以最终浏览器仍会转到HTTP映像。

您的浏览器会在HTTPS中调用控制器,然后控制器操作会向浏览器发送重定向命令,浏览器会从您在response.Headers.Location中设置的新位置检索图像。

如果要避免混合模式,则需要从控制器检索图像并从操作中返回FileResult,这样浏览器就不必访问HTTP站点。

另一种方法是将图像复制到您的网站。