We are seeing an issue with iOS Captive Network Assistant (CNA). When a user selects public SSID to access internet, CNA does not load on some iPhones. This behavior is random and is not specific to any iPhone or iOS version. We checked on Captive Portal side; we are returning 200 OK with appropriate landing page content every time.
Observations: We observed that iPhones typically send 4 requests to Captive Portal when opening CNA. When it fails to open CNA, we see 1 request only. Detail below.
CNA launches:
- {name=Connection, value=close}, {name=User-Agent, value=CaptiveNetworkSupport-418 wispr}
- {name=Connection, value=close}, {name=User-Agent, value=CaptiveNetworkSupport-418 wispr}
- {name=Connection, value=close}, {name=User-Agent, value=CaptiveNetworkSupport-418 wispr}
- {name=user-agent, value=Mozilla/5.0 (iPhone; CPU iPhone OS 15_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148}
Here, all requests with CaptiveNetworkSupport are on HTTP 1.0. While the user-agent shown on number 4 is on HTTP 2.0
CNA does not launch:
{name=Connection, value=close}, {name=User-Agent, value=CaptiveNetworkSupport-418 wispr}
We see 1 request only when CNA does not launch. In this case, the user-agent is either “CaptiveNetworkSupport” or “NetworkCTS”
Has anyone run into this kind of problem with iOS CNA?
NOTE: We do not have such problems on Android, Windows and MacOS. Also note that there is a known issue where CNA does not load sometimes when Captive Portal is not IPv6 enabled. In our case, we have IPv6 enabled.