我的基于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的所有图片:)。
答案 0 :(得分:1)
因为您的代码会将重定向发送回另一个位置,所以最终浏览器仍会转到HTTP映像。
您的浏览器会在HTTPS中调用控制器,然后控制器操作会向浏览器发送重定向命令,浏览器会从您在response.Headers.Location
中设置的新位置检索图像。
如果要避免混合模式,则需要从控制器检索图像并从操作中返回FileResult
,这样浏览器就不必访问HTTP站点。
另一种方法是将图像复制到您的网站。