我正在使用 AngularJS 开发一个 Web 应用程序,它既可以从浏览器访问,也可以嵌入到 Android WebView 中。
我的队友开发了一些通过自定义标头“AuthToken”识别用户的 API。这些 API 在 ASP .NET 4.5 中,他在 Web.config 文件中正确添加了“Access-Control-Expose-Headers”参数。
API 公开了“authorizeUser”方法,它应该允许我获取 AuthToken 标头。
如果我从我的浏览器(Chrome、Firefox、IE、Safari、Opera..)浏览 Web 应用程序,一切正常。
当我将 Web 应用程序嵌入 Android WebView 时出现问题:对于高于 4.2.2 的 Android 版本,一切正常。但对于等于或低于 4.2.2 的 Android 版本,自定义标头“AuthToken”似乎被阻止浏览器。
这似乎是Android WebView引擎的问题(与Android Stock Browser相同)..我认为它正在感知AJAX请求是跨站点的,因此它切断了我的自定义标头..
我这么说是因为我确信 Web API 会返回令牌。
因此,我深入研究了 AngularJS 源代码并编辑了 xhr.onreadystatechange 的实现.. 不再使用 .. 获取响应标头。我尝试通过..xhr.getAllResponseHeaders()
逐一阅读它们xhr.getResponseHeader("<header-name>")
但是当xhr.getResponseHeader("AuthToken")
被执行到 Android WebView 中时,在 Logcat 中我找到了一个 WebConsole 日志,上面写着"Refused to get unsafe header AuthToken"。
你有没有遇到过类似的问题?
如果您需要更多信息或一些代码片段,请告诉我!