標籤:eth ssi orm ddr ref ima 失敗 負載 ros
IPv6已經被越來越廣泛的支援了,尤其是蘋果強制要求iOS (確切的說是iOS 9以及後續版本)應用必須支援IPv6之後(官方宣布),更將進一步推動IPv6的使用。
不過蘋果應用作為用戶端強制要求IPv6,是不是變相地要求服務端也得是IPv6支援的呢?最近就發現很多抱怨,說由於Azure不支援IPv6,所以導致調用了Azure服務的應用發布失敗。比如這個Azure feedback裡的評論。
首先我同意Azure或者其他服務提供者應該更多的支援IPv6,而且Azure上的VM和負載平衡在大部分地區已經支援IPv6了(具體可查看這裡和這裡)。不過回到這個問題的本身,iOS應用發布失敗真的是因為調用了部署在Azure上的服務導致的?根據我的分析,不是。
首先,來看看蘋果商店會做哪些檢測來判定是否支援IPv6,總結下來有以下幾點:
- 是否使用網路架構
- 是否使用只支援IPv4的API (注意這裡的API不是指服務端API,而是用戶端引用庫裡的API,尤其是網路相關的)
- 是否有寫死的IPv4網路地址
所以壓根就跟服務端沒什麼關係,除非把服務端的URI寫死成IPv4地址了。
另外,看看蘋果官網關於服務端的說法:
Server updates
If you have a server running on the wider Internet, it is not necessary to update your server immediately. Your server will be accessible to IPv6-only devices via DNS64/NAT64.
最後,看看用戶端到服務端訪問的全過程,如。即使服務端只支援IPv4,支援IPv6的蘋果用戶端也是可以工作的
綜上所述,如果iOS應用由於IPv6檢測失敗導致發布失敗,不應該去怪服務端,而應該檢查自己的用戶端代碼:
- 是否有寫死的IPv4地址
- 是否使用底層的網路API,比如gethostbyname,gethostbyname2
- 是否使用小單位地址儲存類型,比如uint32_t, in_addr
由於IPv6導致的iOS應用發布失敗,是否該怪Azure?