最近项目上遇到这样一个问题,iOS 系统,在 AJAX 请求发出后,因授权原因返回 401,发现一直 pending,查了很久发现 SO 上有类似提问。

主要原因是,当 AJAX 返回带 WWW-Authenticate 信息的 401 响应时,Web 容器 (浏览器或 WebView )会尝试弹出弹出框让你输入认证信息。但是在 iOS 平台,系统的某些默认行为会导致请求没有被发送到应用层。因此,AJAX请求会处于 pending 状态。

因为项目并不是基于 HTTP 认证的,而服务端采用的 IIS,默认开启了相关配置,最终为解决问题,选择了删除响应头中所有的 WWW-Authenticate 信息。如果遇到同类问题,请留意是否存在下图所标识 header

WWW-Authenticate

参考:
https://stackoverflow.com/questions/30529210/handling-http-401-with-www-authenticate-in-cordova-ionic-ios-application
https://issues.apache.org/jira/browse/CB-2415