知道为什么在
XMLHttpRequest
中使用正确凭据的
Pebble JS Framework
在 Android 上无法进行基本身份验证,但在 iOS 上却可以工作吗?
完全相同的代码,大致如下:
var req = new XMLHttpRequest();
req.open(method, url, true, user, pass);
req.send(data);
req.onreadystatechange = function() { ... }
从 Android Pebble 应用程序返回 401,但在 iOS 中验证正确。
我找到了一个在 Android 上适合我的解决方法。
不知道为什么但直接经过身份验证的请求:
req.open(method, fullurl, true, user, pass);
req.send(data);
对我不起作用 - 它总是返回 401。所以我尝试通过标头设置基本身份验证:
req.open(method, fullurl, true);
req.setRequestHeader("Authorization", "Basic " + Base64.encode(user + ":" + pass));
req.send(data);
(其中 Base64 取自此处:https://stackoverflow.com/a/246813/961695)——它成功了!也许 Android 上的 XmlHttpRequest 实现存在错误。
如果请求通过 cookie/headers 进行身份验证,我们可以设置 headers 并使该请求 withCredentials 值为 false。
withCredentials 属性在 IOS 中必须为 false,否则,您可能会从服务器收到 401 响应。
注意:- 在 Android 和 Web 平台中也无需“withCredentials”属性即可工作
req.open(method, fullurl, true);
req.setRequestHeader("Cookie", "CookieInfo"));
req.send(data);
request.withCredentials = false;