跨域请求时出现间歇性的ERR_SSL_PROTOCOL_ERROR错误

27

我的网站用户在向 api.flickr.com 发起跨域请求时,偶尔会遇到 ERR_SSL_PROTOCOL_ERROR 错误。

所谓“偶尔发生”,是指昨天大约 1200 次请求中有 4 次出现此错误。

Failed to load resource: net::ERR_SSL_PROTOCOL_ERROR     https://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=.....

我的网站是一个运行在Google App Engine上的AngularJS应用程序,仅支持HTTPS。

sslchecker显示我的网站的证书和证书链已正确安装。嗯,我认为看起来没问题!

针对api.flickr.com的sslchecker显示证书链的ROOT 1丢失了。那是问题吗?我有没有任何方法解决这个问题?

还有其他的想法吗?也许我们的证书是由不同的机构颁发的,这是问题所在吗?

编辑 -从谷歌分析中收集到的一些其他可能相关的信息:

  • 已经看到它在不同的操作系统上发生过-Android,iOS,Windows
  • 不同的浏览器-Android,Chrome,Safari
  • 不同的网络域

如果相关的话,您是通过App Engine的URLFetch服务调用API,还是直接从您的AngularJS客户端调用? - tx802
这个错误是否一直出现在同一个用户身上? - New Dev
1
这似乎不是你那边的问题。证书通常要么有效,要么无效,一旦你进入安全模式,查询外部API不应该出现协议问题,除非Flickr在处理日期等方面出现问题。事实证明,今年日历年度已经有多次关于Flickr这种间歇性问题的报告。例如:https://www.flickr.com/help/forum/en-us/72157648704562424/ - Dave Alperovich
这似乎是一个跨时区维护时间的内部问题。我建议你在内部提出一张工单,因为即使是帮助论坛的人也承认他们在没有管理员协助的情况下互相帮助。我的怀疑是Flickr无法为您或您的应用程序做任何事情。正如我一直指出的那样,这似乎是一个维护/管理员问题。 - Dave Alperovich
@NewDev 不同的用户...不同的设备类型,等等。 - Harry Lime
显示剩余3条评论
3个回答

23

持续的SSL协议错误可能是由以下问题引起的:

  • 目标服务器期望不同的协议(例如SSLv1,SSLv2,SSLv3)

  • 违反安全策略(例如某些服务器不接受来自客户端的证书请求)

  • 防火墙妨碍过滤/加密


间歇性的SSL协议错误非常难以诊断。它们可能是会话过期、密钥过期、连接中断、数据包丢失等因素的结果。

更糟糕的是,它们可能是由服务器端问题引起的,例如日期时间同步、服务器连接池满等。

最佳实践是重新发送请求:因为这些问题通常是暂时的故障,并且通常在第二次尝试时成功。


Flickr将其API于2014年6月27日(不到一年)切换为仅SSL。此后,他们的论坛上涌现了大量与SSL相关的问题。

在过去几个月中,许多用户报告出现偶发的SSL协议错误查看主题)。

这些协议错误出现在所有设备类型上(笔记本电脑、台式机、移动设备、Linux、Windows等),通常立即重试会成功。这些问题的共性和高度不频繁的性质表明,主机端存在一些与客户端无关的问题。

由于刷新或第二次尝试通常是成功的,建议捕获错误并进行1-3次重试:

var promise = flickrService.get(...);

promise.success(function (data, status, headers, config) {
        // Big Party
    })
    .error(function(data, status, headers, config) {
        if (status == 107) {
            promise = flickrService.get(...);

            promise.success(function (data, status, headers, config) {
                    // Big Party
                })
                .error(function (data, status, headers, config) {
                    AlertService.RaiseErrorAlert("Flickr temporarily unavailable.Please try again later");
                });
        }
    });

如果您持续收到 "协议错误", 则通知用户 Flickr 暂时不可用,请稍后再试。


5

如果您遇到此错误并且正在测试本地主机端点,请确保使用 http 而不是 https 作为URL。

例如:http://localhost:8080/ 而不是 https://localhost:8080/


这应该是第一个检查点。这节省了我一些时间,谢谢! - aero8991

2

这可能是答案,但我猜测这可能不是客户端问题,所以我建议您在API服务器中添加该行标题进行更新:

Access-Control-Allow-Origin: https://api.flickr.com/*

这应该可以解决一些用户面临的问题。

1
如果是 Flickr,那么他就得听从 Flickr 的安排。 - Strawberry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接