javascript - 为什么我的 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 代码设置标题。
我试图找到在不使用扩展名的情况下传递这些标题。
解决方案
Postman 或其他类似工具为您提供开发环境。这样,您可以在发送请求和通过更改工具设置获得响应时忽略并传递 CORS 规则。但是如果您通过浏览器(chrome、firefox 等)发送请求,浏览器总是会添加一些预检控件。
例如,浏览器在您的 http 请求之前发送选项消息以获取服务器端规则。这样在处理您的 http 请求之前,浏览器会阻止无效或错误的请求。
在您的情况下,服务器端必须包含您的域信息。您不能通过仅添加"Access-Control-Allow-Origin: *"
或"Access-Control-Allow-Origin: http://www.webiste.com"
语句从客户端更改此通信规则。
推荐阅读
- mongodb - 大集合中按月分组的 MongoDB 聚合 - 优化管道
- java - 为什么这段代码调用私有方法?
- node.js - 如何正确更新 module.exports?
- cors - Haproxy CORS 请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 在 Python 中调试 xml ElementTrees
- apache-flink - Flink example job of long-running streaming processing
- java - 创建页面加载动画是spring boot
- python - Python:根据其值将一列拆分为两列
- html - 如何使用 CSS 在顶部和底部制作一个打开的盒子作为容器?
- python - 分配器 (GPU_0_bfc) 尝试分配内存不足