【发布时间】:2015-01-02 09:09:35
【问题描述】:
我最近一直致力于让 CORS 在我构建的一些 Web 应用程序上运行,但在我们公司 iPad 上的移动 safari 中遇到了一个神秘的问题。
环境分解,我有一个托管网页的前端服务器。然后我有 2 个不同的后端服务器,Sharepoint 2013 和 CRM 2011。它们都有 REST 服务,我试图从前端服务器上发布的应用程序访问这些服务。
在两个后端服务器上,在 IIS 中,我将响应标头设置为:
- 访问控制允许来源:前端服务器服务器名称
- 访问控制允许凭据:true
- 访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS
- Access-Control-Allow-Headers:内容类型、授权、接受、来源
在我的 $.ajax 调用中,我添加了
xhrFields: { withCredentials: true }。
所以一个简单的查询现在看起来像:
function getRequestDigestTEST() {
$.support.cors = true;
$.ajax({
url: 'http://sharepoint/_api/contextinfo',
method: "POST",
headers: { "Accept": "application/json; odata=verbose" },
xhrFields: { withCredentials: true },
success: function(results) {
requestDigest = results.d.GetContextWebInformation.FormDigestValue;
},
error: function (error) {
alert(error.status);
}
});
}
这一切都适用于任何桌面浏览器,但我的问题是移动 safari。在 iPad 上,我收到 401 未经授权的退货。当我在 IIS 上启用跟踪时,后端服务器会将移动 safari 传递的身份验证视为匿名。在桌面浏览器中,我看到 NTLM 具有正确的用户名。
我还尝试将用户名/密码属性添加到 ajax 调用,但即使这些属性似乎也没有传递给 Web 服务,因为跟踪仍然报告匿名身份验证类型。
我四处寻找,似乎找不到任何可以让 iPad 与后端资源对话的东西。
【问题讨论】:
标签: jquery ajax ipad safari cors