問題背景
iOS 13 下上傳文件,經常性第一次 400,第二次才成功。
初步排查
經檢查,400 時還沒有到后台服務,屬於 nginx 層直接返回。
獲得線索
Google 后得到線索:
iOS 13 對 TLS 要求更嚴格,所以如果 web server 不滿足可能會造成偶發請求失敗。具體可參見:https://stackoverflow.com/questions/58011737/ios-13-tls-issue
環境對比
同時由於我們是預發布環境沒有問題,測試環境有問題,所以排查了預發布和測試的 web server 配置,可以使用檢測網站:https://www.ssllabs.com/ssltest/index.html
檢測出預發布環境和測試環境都支持 TLS1.2,針對 Safari 的檢測結果為 預發布環境是 TLS 1.2>http/1.1,測試環境為 TLS 1.2 > h2
所以懷疑是 iOS 在 http2 下的問題,最后測試環境改為 http/1.1 后,問題解決
最后結論
如果有類似問題可以從以下幾個方面排查
1. 如果 web server(如 nginx)不支持 TLS 1.2,可以更改配置后驗證
2. 如果已支持 TLS 1.2,可以檢查是否啟用了 HTTP/2,可以關閉后驗證