如何避免显示搜索结果时出现混合内容错误?
How to Avoid a Mixed-Content Error When Displaying a Search Result?
问题:
如何在 Google 自定义搜索引擎中包含来自单个域的 https: 和 http: 结果,但在具有安全父 window 的 iframe 中显示任何此类结果?
它的结构:
我的 Google 自定义搜索引擎当前搜索“mydomainname.com/directory/”,并选择“包括地址包含此 [=] 的所有页面120=]”。它在网站的特定页面上运行,以搜索指定目录内的页面。 Link 在网络搜索设置中设置的目标是与搜索栏位于同一页面上的 iframe。
浏览器window和iframe src都在同一个安全域中。由于搜索结果都来自站点结构中的目录,因此也都在同一个域中。
目前有些结果显示为“https://...”,有些结果显示为“www...”。显然,当浏览器 window 是 https:// 并且尝试在 iframe 中显示 http:// 搜索结果时,这会产生混合内容错误。
http:// 的结果当然也可以用作 https:// url。我不知道是什么让一个页面或文件在搜索结果中显示为“www.”或“https://”来自单个安全域。
即使我将要搜索的站点指定为 https://www.mydomainname.com/directory/
,也会出现“http://”结果。我不想排除这些结果,但我希望在安全浏览网站时能够显示它们。
Objective:
所以我需要解决的底线规则是不安全的页面或文件不能加载到安全网页上的 iframe 中。我显然希望用户能够使用 https:// 站点,但我需要搜索以允许这些用户获得所有可能的搜索结果的方式运行。
我需要将结果的目标作为此 iframe 的原因是这是显示网页所有内容的框架。搜索结果与其他信息的组织协调工作。这样,从页面导航中的类别中选择 link 并从自定义搜索结果中选择搜索结果会将所选内容显示到同一位置,即 iframe。
我试过的:
我已经尝试在 Google 搜索引擎 (gse) 设置中专门指定 https:// 并从脚本行 gcse.src =(document.location.protocol == 'https:' ? 'https:' : 'http:') + '//cse.google.com/cse.js?cx=' + cx;
.
中删除 : 'http'
我查看了它 link 的脚本文件: http://cse.google.com/cse.js?cx=012685392925564329750:ghl2znnfada
但我无法破译其中可能需要更改的内容。
在控制台的错误日志中,除了预期无法在安全浏览时加载不安全页面外,我看不出有什么相关之处。但是有这个看起来(也许)是相关的吗?虽然我可能完全错了,因为我也无法真正破译它:
Mixed Content: The page at
'https://mydomainname.com/directory/index.php' was loaded over HTTPS,
but requested an insecure script 'http://www.google.com/jsapi?
key=ABQIAAAAdCtw6Xq1Q31YAr7VSQOSvxS5g7WKqCWUBuUdhz3-
rUOumR2saRSPGvey2WjYALW7f5_JzakSL3lAEg'. This request has been blocked;
the content must be served over HTTPS.
来自错误消息的不安全脚本:
http://www.google.com/jsapi?key=ABQIAAAAdCtw6Xq1Q31YAr7VSQOSvxS5g7WKqCWUBuUdhz3-rUOumR2saRSPGvey2WjYALW7f5_JzakSL3lAEg
建议的解决方案路径:
我对任何可能的解决方法持开放态度。我考虑过几条路线,但不确定如何正确执行它们,或者我尝试执行它们时失败了。
我认为可能有效的一些解决方案是:
将所有结果显示为 https:// links(不排除任何结果),以便无论是否通过安全连接到站点都可以访问它们。
将任何 link 没有 https:// 的点击重定向到 iframe 作为 https://
对服务器上的页面和文件进行一些更改,以便它们仅以 https://
的形式出现在搜索结果中
更改 Google 的搜索引擎脚本,以便将所有找到的结果解析为 https://
以某种方式将 links 显示为 http:// 如果浏览不安全,而 https:// 如果浏览安全 *
*我不知道这样做的可行性或效率如何
最可靠的解决方案是将您的所有网站迁移到 https 中:
- 使用 301(永久)从 http 重定向到 https
- 并激活 HSTS(如果可能的话使用 includeSubdomains)
Google 需要一点时间来更新他的索引,但 HSTS 会自动将 http 替换为 https,因此您应该避免任何混合内容问题。
问题:
如何在 Google 自定义搜索引擎中包含来自单个域的 https: 和 http: 结果,但在具有安全父 window 的 iframe 中显示任何此类结果?
它的结构:
我的 Google 自定义搜索引擎当前搜索“mydomainname.com/directory/”,并选择“包括地址包含此 [=] 的所有页面120=]”。它在网站的特定页面上运行,以搜索指定目录内的页面。 Link 在网络搜索设置中设置的目标是与搜索栏位于同一页面上的 iframe。
浏览器window和iframe src都在同一个安全域中。由于搜索结果都来自站点结构中的目录,因此也都在同一个域中。
目前有些结果显示为“https://...”,有些结果显示为“www...”。显然,当浏览器 window 是 https:// 并且尝试在 iframe 中显示 http:// 搜索结果时,这会产生混合内容错误。
http:// 的结果当然也可以用作 https:// url。我不知道是什么让一个页面或文件在搜索结果中显示为“www.”或“https://”来自单个安全域。
即使我将要搜索的站点指定为 https://www.mydomainname.com/directory/
,也会出现“http://”结果。我不想排除这些结果,但我希望在安全浏览网站时能够显示它们。
Objective:
所以我需要解决的底线规则是不安全的页面或文件不能加载到安全网页上的 iframe 中。我显然希望用户能够使用 https:// 站点,但我需要搜索以允许这些用户获得所有可能的搜索结果的方式运行。
我需要将结果的目标作为此 iframe 的原因是这是显示网页所有内容的框架。搜索结果与其他信息的组织协调工作。这样,从页面导航中的类别中选择 link 并从自定义搜索结果中选择搜索结果会将所选内容显示到同一位置,即 iframe。
我试过的:
我已经尝试在 Google 搜索引擎 (gse) 设置中专门指定 https:// 并从脚本行 gcse.src =(document.location.protocol == 'https:' ? 'https:' : 'http:') + '//cse.google.com/cse.js?cx=' + cx;
.
: 'http'
我查看了它 link 的脚本文件: http://cse.google.com/cse.js?cx=012685392925564329750:ghl2znnfada
但我无法破译其中可能需要更改的内容。
在控制台的错误日志中,除了预期无法在安全浏览时加载不安全页面外,我看不出有什么相关之处。但是有这个看起来(也许)是相关的吗?虽然我可能完全错了,因为我也无法真正破译它:
Mixed Content: The page at
'https://mydomainname.com/directory/index.php' was loaded over HTTPS,
but requested an insecure script 'http://www.google.com/jsapi?
key=ABQIAAAAdCtw6Xq1Q31YAr7VSQOSvxS5g7WKqCWUBuUdhz3-
rUOumR2saRSPGvey2WjYALW7f5_JzakSL3lAEg'. This request has been blocked;
the content must be served over HTTPS.
来自错误消息的不安全脚本:
http://www.google.com/jsapi?key=ABQIAAAAdCtw6Xq1Q31YAr7VSQOSvxS5g7WKqCWUBuUdhz3-rUOumR2saRSPGvey2WjYALW7f5_JzakSL3lAEg
建议的解决方案路径:
我对任何可能的解决方法持开放态度。我考虑过几条路线,但不确定如何正确执行它们,或者我尝试执行它们时失败了。
我认为可能有效的一些解决方案是:
将所有结果显示为 https:// links(不排除任何结果),以便无论是否通过安全连接到站点都可以访问它们。
将任何 link 没有 https:// 的点击重定向到 iframe 作为 https://
对服务器上的页面和文件进行一些更改,以便它们仅以 https://
的形式出现在搜索结果中
更改 Google 的搜索引擎脚本,以便将所有找到的结果解析为 https://
以某种方式将 links 显示为 http:// 如果浏览不安全,而 https:// 如果浏览安全 *
*我不知道这样做的可行性或效率如何
最可靠的解决方案是将您的所有网站迁移到 https 中:
- 使用 301(永久)从 http 重定向到 https
- 并激活 HSTS(如果可能的话使用 includeSubdomains)
Google 需要一点时间来更新他的索引,但 HSTS 会自动将 http 替换为 https,因此您应该避免任何混合内容问题。