【发布时间】:2020-04-06 05:04:48
【问题描述】:
我们有一个旧的 SharePoint 2010 服务器,我们希望从该服务器请求网络内的数据。
我已经知道由于 CORS,我无法从其他服务器请求数据,但实际上据我了解,有可能允许此类请求。因此,我需要修改服务器 HTTP 响应标头,是吗?
我有这个设置,但它实际上不起作用。
服务器 - SharePoint 2010 - IIS:
我已将 Access-Control-Allow-Origin 设置为我的笔记本名称 (grolne-nb090)。在 JavaScript 应用程序上,我定义了以下请求:
onButtonClickHandler(event) {
event.preventDefault();
fetch('https://my.sharepointserver.com/sites/IT/_layouts/ArchiveSearch/ajax.aspx?requestType=test', {
method: 'GET',
mode: 'cors',
headers: {
'Access-Control-Allow-Origin': 'http://grolne-nb090:3000',
'Access-Control-Allow-Methods': 'GET, POST, PUT, PATCH, POST, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type,Authorization,Accept',
'Content-Type': 'application/json', //'text/plain', //
'Accept': 'application/json'
},
credentials: 'include'
})
.then((response) => {
console.log('fetch data', response);
return response.json();
})
.then((data) => {
console.log('data',data);
})
.catch((error) => {
console.error('Error on fetch request:', error);
});
}
当前的错误信息是这样的:
访问获取 'https://my.sharepointserver.com/sites/IT/_layouts/ArchiveSearch/ajax.aspx?requestType=test' 来自 'http://grolne-nb090:3000' 的来源已被 CORS 阻止 策略:对预检请求的响应未通过访问控制 检查:它没有 HTTP ok 状态。
如果我将mode 更改为no-cors,我会得到opaque 的答案。
如何正确设置服务器/应用程序,以便访问这些数据?我需要在服务器端设置哪些 HTTP 响应标头以及 JavaScript 请求的外观如何?
想一想,请求者 URL 是否也必须使用 HTTPS?这可能是个问题吗?
更新
我搜索了很多,似乎对 SharePoint 服务器的请求需要身份验证,而飞行前不提供。因此,来自 SharePoint 的答案似乎是飞行前的 401 Unauthorized,这会使整个请求崩溃。
现在我正在搜索,如何禁用单个 SharePoint 页面的身份验证...(或者如果可能的话)
【问题讨论】:
-
你检查过共享点日志吗?
-
是的,但实际上没有任何帮助。请求的 3 个条目。 2 个“监控”类别和 1 个“记录相关数据”类别条目。
-
安装 IIS CORS 模块,而不是使用您的自定义响应标头 blogs.iis.net/iisteam/introducing-iis-cors-1-0,然后将其配置为处理预检请求。
-
IIS 可以为信号 aspx 页面设置身份验证。但是我不熟悉sharepoint。如果sharepoint使用IIS认证,可以在applicationhost.config中添加
设置信号页匿名认证。 -
@LexLi 感谢您提供该工具的链接。我不知道它的存在。但实际上我也想了解 CORS 是如何工作的。因此,有时深入研究主题比使用工具更好。 ;-)
标签: javascript iis cors sharepoint-2010