- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我可以找到有关 SNI 的各种信息(请参阅 Wikipedia ),但我找不到有关浏览器实际支持的任何统计信息。
我能找到的最好的结果是它应该可以在带有 SP3 的 Windows XP 上运行。
有谁知道 SNI 是否真的可以在实践中使用?
最佳答案
我可以分享我的经验和方法,将虚拟主机环境(每台服务器多个域)中的一个 IP 证书切换到所有域一个 IP 的负载平衡环境。
我们查看了我们的分析(超过 100 万独立访问者/月),其中大部分是希望在线购买汽车零部件的北美男性用户,并且在 2014 年 3 月 8 日发现,大约 4% 的用户使用 Internet Explorer 使用 Windows XP(其他人是次要的——最坏的情况是 4.5% 的用户会因为不支持 SNI 而受到影响)。请记住,我们无法“控制”这些用户,因此我们无法告诉他们切换浏览器。这个百分比也在迅速下降,至少在美国是这样。
我们首先认为非 SNI 客户与支持 SNI 的客户有一些不同的体验是“可以的”。
我们的方法是检测服务器端(使用 UA 字符串)哪个浏览器/操作系统组合不支持 SNI(正如其他人提到的:Wikipedia article on SNI support)。我们所有的域(约 120 个)都会有一个 A 记录指向一个负载均衡的 IP。我们有一个域的第二个 IP(也是负载平衡的),我们可以称之为 generic-autoparts.com。
所以设置是[我不与我用作以下示例的任何域相关联]:
mikesautoparts.com --> IP X 的域名服务器记录
dansautoparts.com --> IP X 的域名服务器记录
jensautoparts.com --> IP X 的域名服务器记录
... 等等
generic-autoparts.com --> IP Y 的名称服务器记录
如果客户点击 http://www.dansautoparts.com , 并支持 SNI,没有任何 react 。他浏览 dansautoparts.com,到了结账的时候,他使用 https://www.dansautoparts.com .
如果客户点击 http://www.dansautoparts.com ,我们检测到他不支持 SNI,我们立即将客户重定向到 http://generic-autoparts.com/dansautoparts.com .他在那里购物,结账时使用 https://generic-autoparts.com/dansautoparts.com
现在,如果客户点击 https://www.dansautoparts.com直接(电子邮件中的链接,搜索引擎中的索引页面),您很不走运。他们会收到令人讨厌的证书错误。在我们的案例中,我们确保系统发送的所有电子邮件都没有使用 https,并且我们知道搜索引擎没有将我们的 https 页面编入索引。
每个环境都有不同的挑战和潜在的权衡。我们发现这在我们的案例中效果很好,客户会“接受”(或不通知)被重定向到 http://generic-autoparts.com/[ORIGINAL域].com。我们还通过 generic-autoparts.com 确保结账安全。
假设 20% 的非 SNI 用户注意到重定向,这看起来很可疑,然后他们离开了。在我们的案例中,这是 0.8 - 0.9 %(基于 2014 年 3 月 8 日的数字)用户,我们愿意接受它。我现在没有这方面的具体数据,但整体销售额保持稳定。 [编辑 2014 年 3 月 28 日:在我们更换 100% 的客户后,我们发现对销售没有影响]
2014 年 7 月 8 日实现更新
事实证明,在服务器上静态检测每个 UA 代理字符串是不可能的。我们实现了以下 JavaScript 来检测浏览器的 SNI 功能。一般方法是针对需要 SNI 的域执行 JSONP 请求(Apache 通过“SSLStrictSNIVHostCheck on”支持这一点)。如果 JSONP 请求因超时而失败,我们会将客户重定向到非 SNI 域。
更复杂的是,我们不想仅仅因为 SNI_TEST_DOMAIN 关闭就重定向每个人。如果 JSONP 请求失败(由于无法直接检测 JSONP 故障而超时),我们会通过执行 HTTP“健康检查”请求来验证服务器是否可用。此外,我们不想在每次页面加载时都运行这个 javascript 代码,因为这会增加一些奇怪的超时和错误重定向许多客户的机会,所以我们在 SNI 检查完成后设置一个 session 变量,这样它就不会发生当客户浏览网站时再次。
我们知道,由于 JSONP 超时不可靠,我们会得到某些失败的错误检查,但自从实现此操作后,我们没有收到客户的投诉。
var redirect='http://REPLACE_WITH_NON_SNI_URL';
var sni_https_timeout, sni_http_timeout;
var https_req = $.ajax({
url : 'https://SNI_TEST_DOMAIN.com/snitest.php',
dataType : "jsonp",
}).done(function() {
window.clearTimeout(sni_https_timeout);
var request = $.ajax({
url: "index.php?ua=sni_check_done",
type: "POST"
});
})
sni_https_timeout = window.setTimeout(function() {
var http_req = $.ajax({
url : 'http://SNI_TEST_DOMAIN/sni_healthcheck.php',
dataType : "jsonp"
}).done(function()
{
window.clearTimeout(sni_http_timeout);
window.setTimeout(function()
{
window.location = redirect;
},
200);
});
sni_http_timeout = window.setTimeout(function() { sni_http_fail(); }, 8000);
}, 8000);
function sni_http_fail() {
var request = $.ajax({
url: "index.php?ua=sni_check_done",
type: "POST"
});
}
<?php
if (array_key_exists('callback', $_GET))
{
header( 'Content-type: application/javascript' );
echo "{$_GET['callback']}();\n";
}
关于ssl - SNI 是否在浏览器中实际使用和支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154596/
我的“登录”是在 IE 浏览器中进行的,登录后,如果我单击链接,它们就会在 Chrome 浏览器中打开。如何在同一个测试用例中将我当前的浏览器从 IE 切换到 Chrome。如果我创建一个 chrom
您好,我不明白在 Firefox 的内容属性中使用的特殊字符的不同显示行为。我已经剥离了一切并创造了一支笔: http://codepen.io/rpkoller/pen/Fbgav 在其“基本形式”
我正在研究 Spring Data REST,特别是 HAL 浏览器。我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/refere
我正在使用工具提示,在 ie 上出现定位错误。我放了jquery浏览器代码 我的工具提示 $('.tooltip').tooltip({ position: "bottom center"
我应该如何处理蓝鸟协程中的错误? 我使用co in节点已有一段时间,它具有出色的捕获功能。 co(function*() { return new Promise(function(resol
package webviewbrowser; import java.util.List; import javafx.application.Application; import javafx.
我有一些 JavaScript 在同一域上的两个独立服务器之间共享请求。 .com 是 JavaScript 中域的要求吗? 在这种情况下,两台服务器都位于 .abc.tyy 域上,tyy 通常是 .
package webviewbrowser; import java.util.List; import javafx.application.Application; import javafx.
我正在尝试构建仍支持 NPAPI 的先前版本的 Chromium 浏览器。我已经获得了代码,并且可以使用 stand build 命令在我的 mac 上构建最新版本的 Chromium gclient
我环顾四周,找不到 browscap 的 Python 等效项(我在 PHP 中使用它来检测给定的用户代理字符串是什么浏览器。 我希望我不必自己写......:P 最佳答案 看看这个,它应该做你想要的
是否有任何 chrome 或 firefox 扩展允许 javascript 在客户端 PC 中创建写入文件? 最佳答案 你想做什么? HTML5 有一个 File API .这是最好的解决方案,因为
当我点击链接或刷新或关闭标签页时,我有这段代码会发出警报。 但我需要在关闭 窗口(选项卡)上仅 发出警报。怎么做? 我的网站上有很多外部和内部链接。
我目前正在尝试使用 Browserify + Angular,但我遇到了一个奇怪的问题。我在我的 Controller 的子目录中创建了一个名为 controllers/start-controlle
我正在为客户(项目已被接受,但现在是解释不同功能的问题)写一份详细的估算,以开发一个响应式布局的网站。 这不是我第一次进行此类开发,但这是一个关键客户,必须铺平道路。 布局将从 300px 宽度调整到
我在时事通讯上设计了一些黑底白字。由于时事通讯在打印时看起来不错且可读。我需要使布局和文本与浏览器中的内容相似。 通常情况下,黑色文本和无背景颜色是浏览器/网络邮件客户端的默认打印样式吗? 最佳答案
我有一个使用 GWT/mGWT 构建的移动友好网络应用程序。该应用程序有白色输入文本框和深灰色输入文本。但是,在 Android 浏览器上,文本显示为白色,因此是不可见的。我尝试的所有 CSS 都无法
我创建了一个带有选择输入的页面来更改正在使用的 jQuery UI 主题。当主题更改时,它会存储在 cookie 中。页面加载时,如果 cookie 存在,则恢复主题,否则加载默认主题。 当我使用 F
在我的 CSS 中,我使用了以下代码片段: word-break: break-word; -webkit-hyphens: auto; hyphens: auto; 渲染引擎如何知道在所有不同语言中
我的网络浏览器 Safari 有问题,我在 Chrome、FireFox 中测试了我的网站。 Safari 版本也是正确的,但是,当需要在 1920x1080 或更高分辨率下对其进行测试时,它无法正常
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我是一名优秀的程序员,十分优秀!