3

我们在 Magento 商店的购物车页面上收到了很多混合内容错误

 Mixed Content: The page at 'https://www.magento.com/onestepcheckout/index/' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/css?family=Lato:400,300,700,900'. This request has been blocked; the content must be served over HTTPS.

我可以看到谷歌字体文件正在通过 http 在我们主题的 head 部分中调用

<link href='http://fonts.googleapis.com/css?family=PT+Sans' rel='stylesheet' type='text/css'>

我想知道如果我将上面的行更改为:

选项1

<link href='https://fonts.googleapis.com/css?family=PT+Sans' rel='stylesheet' type='text/css'>

选项 2

<link href='//fonts.googleapis.com/css?family=PT+Sans' rel='stylesheet' type='text/css'>

考虑到我们的大多数网站都使用 http,哪种方法最好?我不知道选项 2,这似乎是一个非常好的方法。

4

2 回答 2

11

我在这里找到了一个很好的答案。

第二种选择,协议相对链接似乎是最好的选择。

更新的答案

为了给出更完整的答案,协议相对 URL 通过从浏览器查看当前页面的任何协议请求资源来帮助避免混合内容错误。当您的网站具有同时使用 http 和 https 的页面时,这非常有用,因为在我的情况下,结帐页面是通过 https 加载的,而我们网站的其余部分使用 http。

例子

因此,如果我们使用协议相对 url 链接到资源。

<link href='//fonts.googleapis.com/css?family=PT+Sans' rel='stylesheet' type='text/css'>

当我们在https://www.magento.com/onestepcheckout/index/资源上时,将通过 https 加载,https://fonts.googleapis.com/css?family=Lato.

如果我们在http://www.magento.com/资源上,将通过 http 加载http://fonts.googleapis.com/css?family=Lato

这将避免任何混合内容错误。

注意事项

不过,使用这种方法时需要考虑一些事项。

  1. IE6 不知道如何处理协议相关 url。IE6 的浏览器市场份额不到1.7%
  2. IE7 和 IE8 支持协议相对 URL,但它们最终会获取资源两次。一次来自 HTTP,一次通过 HTTPS,这会减慢速度。同样,这些较旧的浏览器在浏览器市场中所占的份额很小。
  3. 不适用于所有电子邮件客户端(例如 Outlook),因此请避免在 HTML 电子邮件中使用协议相关 url
  4. 您必须确保您请求的服务器能够通过 HTTP 和 HTTPS 提供内容。如果不是这样,您最终可能会从不安全或不存在的服务器端口获取内容。

延伸阅读

https://developer.mozilla.org/en-US/docs/Security/MixedContent/How_to_fix_website_with_mixed_content http://www.paulirish.com/2010/the-protocol-relative-url/ http://billpatrianakos.me/blog /2013/04/18/protocol-relative-urls/

于 2014-12-12T23:57:03.493 回答
0

我在将产品添加到购物车时遇到了完全相同的错误,我正在为 Magento 1.9 部署 CDN,让我分享我的解决方案,

根据 Chrome 控制台,js 返回的关于 ajaxcart 的 URL 是以 HTTP 开头的,所以我去查看参数结构我发现了这个:

js/cmsmart/jquery/ajaxcart/cmsmart-ajaxcart.js: var myajaxcart = baseUrlAjax + 'ajaxcart/index/index/id/';
js/cmsmart/jquery/ajaxcart/cmsmart-ajaxcart.js: var urladdajaxcart =  baseUrlAjax + 'ajaxcart/index/index/';
js/cmsmart/jquery/ajaxcart/cmsmart-ajaxcart.js: var checkouturl =  baseUrlAjax + 'checkout/cart/add/';

并且 baseUrlAjax 由 PHP echo $url 控制

app/design/frontend/default/theme691/template/cmsmart/ajaxcart/page/head.phtml: var baseUrlAjax = '<?php echo $url; ?>'; 

并且 $url 由

app/design/frontend/default/theme691/template/cmsmart/ajaxcart/page/head.phtml   >>> 

#$url = Mage::getBaseUrl();  #oldone 
$url = Mage::getUrl('',array('_secure'=>true)); # set to this new one

答对了!

引用到此页面:如何在 Magento 中获取商店安全 URL?

于 2022-03-01T04:10:46.633 回答