首页 > 解决方案 > 为什么我的 JavaScript 代码在给出标头时收到“请求的资源上不存在“访问控制允许来源”标头”错误

问题描述

我正在尝试从 SystemLinkServlet 获取信息。

所以我尝试从 Nintex Forms (Sharepoint) 执行这个 JavaScript 代码:

var http = new XMLHttpRequest();
var url = 'www.exampleservlet.com';
var params = "anyxml" 

http.open('POST', url, true)

http.setRequestHeader('Content-type', 'application/xml');
http.setRequestHeader('Access-Control-Allow-Origin', '*');

http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
};

http.send(params);

但是我的控制台中仍然出现此错误:

Access to XMLHttpRequest at 'www.exampleservlet.com' from origin 'www.exampleorigin.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

似乎标头被忽略了,或者我无法设置多个请求标头?

它适用于邮递员。

更新

所以它与扩展一起工作,但显然,我无法在我的 Nintex 表单中使用 JavaScript 代码设置标题。

我试图找到在不使用扩展名的情况下传递这些标题。

标签: javascriptservletssharepoint

解决方案


Postman 或其他类似工具为您提供开发环境。这样,您可以在发送请求和通过更改工具设置获得响应时忽略并传递 CORS 规则。但是如果您通过浏览器(chrome、firefox 等)发送请求,浏览器总是会添加一些预检控件。

例如,浏览器在您的 http 请求之前发送选项消息以获取服务器端规则。这样在处理您的 http 请求之前,浏览器会阻止无效或错误的请求。

在您的情况下,服务器端必须包含您的域信息。您不能通过仅添加"Access-Control-Allow-Origin: *""Access-Control-Allow-Origin: http://www.webiste.com"语句从客户端更改此通信规则。


推荐阅读