【问题标题】:Why does my JavaScript code receive a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error while the header is given为什么我的 JavaScript 代码在给出标头时收到“请求的资源上不存在“访问控制允许来源”标头”错误
【发布时间】:2021-11-17 12:25:46
【问题描述】:

我正在尝试从 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.

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

它适用于 Postman。

更新

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

我正在尝试在不使用扩展名的情况下传递这些标头。

【问题讨论】:

  • 您是否在请求中设置了 CORS 标头?!?!?!这不是它的工作原理; CORS 旨在保护服务器资源免受某种访问,如果允许客户端设置标头,它将完全违背其目的。网络上有很多关于什么是 CORS 的资源,最好从那里开始。

标签: javascript servlets sharepoint


【解决方案1】:

如果您使用的是 PHP,请尝试在 php 文件的开头添加以下代码:

如果你使用的是本地主机,试试这个:

header("Access-Control-Allow-Origin: *");

如果您使用的是外部域,例如服务器,请尝试以下操作:

header("Access-Control-Allow-Origin: http://www.webiste.com");

我也建议你使用这个扩展:

https://chrome.google.com/webstore/detail/cors-unblock/lfhmikememgdcahcdlaciloancbhjino?hl=en

【讨论】:

  • 我使用了扩展,现在我有了这个:Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response
  • @LouisChopard 你激活了扩展吗?
  • 是的,我做到了。当我激活它时错误发生了变化(新的是我的第一条评论)
  • 希望这篇文章对你有所帮助:stackoverflow.com/questions/32500073/…
  • 成功了,我添加了在扩展中启用 Access-Control-Headers。但是现在,我有另一个问题,如果你想看,我编辑了我的问题!我会想办法解决的
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 2013-12-13
    • 2020-09-17
    • 2020-09-25
    • 2021-05-04
    • 2020-10-31
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多