今天跟前端进行联调,遇到一个奇怪的问题,做个记录。
问题描述:在微信小程序上面,同一个接口调用,在安卓可以正常访问,但是在苹果缺报错了。如下图:
请求头提示:Provisional headers are shown
解决:
1:跨域
首先第一个想法就是跨域了,不过很快就否决掉了。
原因:安卓和我们自己的后台都可以正常访问
2:tls问题
tls版本正常。
下面附上查看tls版本的方法:
1、打开浏览器(谷歌、火狐、360极速版)都可以,在地址栏中输入域名(一定要包含https的域名)
以谷歌为例:
打开域名以后,点击F12或右键检查,找到‘Security’,即可查看对应TLS版本
附:WIndows系统对TLS的支持
Tips:这里强调一下,tls版本必须大于或者等于1.2才可以,否则的话也会出现开头那个问题
3:SSL证书
1:重新检查了,ssl证书正常,没有过期。
2:检测证书
输入该输入的信息,读取证书。看到以下内容,说明缺少ssl证书。
网址:SSL服务器证书安装检查器_OPENSSL工具包_迅通诚信https://www.myssl.cn/tools/check-server-cert.html
情况1:
我这次遇到的情况查询到最后,发现是证书pem复制少了一段,
因为Apache下载下来有三个文件,一个是根证书pem,一个是中间证书pem,一个是秘钥
而Nginx证书下载下来是只有两个文件,一个fullchain.pem,一个是key
fullchain.pem一般会包含根证书+
中间证书,所以会存在两段如下:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
但是我这次这有一段,也许是其他同事复制少了,重新下载证书内容上去,问题解决!
中间证书显示正常!
另外,查阅资料的时候,还有另外一种方案可以重新生成中间件证书,记录一下:
首先先找到 Let's Encrypt
生成出证书的4个文件
cert.pem
chain.pem
fullchain.pem
privkey.pem
将 cert.pem 内容复制到这个地址解析
https://www.myssl.cn/tools/downloadchain.html
解析成功可以获得2个下载按钮
使用 [点击下载中间证书文件]
将下载到的文件中的 内容 复制到 fullchain.pem 的 两段内容的中间 ,保存即可。
(需要注意 fullchain.pem 格式要求极为严格 不能存在空行 空格等)
最后重启nginx 问题解决
# 测试配置是否正常
nginx -t
# 重新加载配置文件
nginx -s reload
结论
原因找到,是服务器缺少中间证书导致的。
问题解决!