D3.js CORS:否';访问控制允许原点';请求的资源上存在标头

D3.js CORS:否';访问控制允许原点';请求的资源上存在标头,d3.js,gruntjs,lodash,fuseki,D3.js,Gruntjs,Lodash,Fuseki,我正在开发一个D3-grunt cli应用程序,在向Fuseki服务器发送post请求时,我面临一个CORS问题 function saveToFusekiFunc() { document.getElementById('fileid').click(); document.getElementById('fileid').value = null; d3.select("#fileid").on("change", function() { var co

我正在开发一个D3-grunt cli应用程序,在向Fuseki服务器发送post请求时,我面临一个CORS问题

function saveToFusekiFunc() {
    document.getElementById('fileid').click();
    document.getElementById('fileid').value = null;

    d3.select("#fileid").on("change", function() {
      var contents;
      var file = d3.select("#fileid").property("files")[0];
      console.log(file);
      var reader = new FileReader();
      reader.onload = function(e) {
      contents = e.target.result;
      console.log(contents);

    let xhr = new XMLHttpRequest();
    let url = "http://localhost:3030/Test/";

    xhr.open(
      "POST",
       url ,
      true
    );

    //xhr.setRequestHeader('Data-Type', 'jsonp');
    xhr.setRequestHeader('Content-Type', 'text/turtle;charset=utf-8');
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
    xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, DELETE, OPTIONS');
    xhr.setRequestHeader('Access-Control-Allow-Headers', 'Origin, Content-Type, X-Auth-Token');
    xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://localhost:8000/');
    xhr.setRequestHeader('Access-Control-Max-Age', '86400');

    xhr.onreadystatechange = function()
    {
    if(xhr.readyState == 4 && xhr.status == 200) {
        alert(xhr.responseText);
    }
    }
    xhr.send(contents);
    };
    reader.readAsText(file);

    })


  }
上面是我尝试发出请求的代码。这只有在浏览器扩展中启用CORS插件时才有效

我还尝试通过更改gruntfile.js中间件来包含访问权限。但这没有帮助。从中我几乎可以肯定,这是服务器端的一些问题

我的家属如下所示:

"dependencies": {
    "d3": "^3.5.6",
    "grunt-cli": "^1.3.2",
    "lodash": "^4.1.0"
  }
我已经尝试了在线找到的大多数解决方案,但除了直接阻止浏览器中的CORS检查外,没有任何效果。我正在尝试从“”向Fuseki服务器“”发出请求

我得到的错误是:

Access to XMLHttpRequest at 'http://localhost:3030/Test/' from origin 'http://localhost:8000' 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.
请求标头:

还检查了Fuseki配置的web.xml文件,该文件似乎具有CORS设置:

<!-- CORS -->
  <filter>
    <filter-name>cross-origin</filter-name>
    <!-- Ported and standalone version of org.eclipse.jetty.servlets.CrossOriginFilter -->
    <filter-class>org.apache.jena.fuseki.servlets.CrossOriginFilter</filter-class>
    <!-- Defaults may be fine --> 
    <init-param>
      <param-name>allowedOrigins</param-name>
      <param-value>*</param-value>
    </init-param>
    <init-param>
      <param-name>allowedMethods</param-name>
      <param-value>GET,POST,DELETE,PUT,HEAD,OPTIONS,PATCH</param-value>
    </init-param>
    <init-param>
      <param-name>allowedHeaders</param-name>
      <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Authorization</param-value>
    </init-param>
    <init-param>
      <param-name>exposedHeaders</param-name>
      <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
  </filter>

交叉起源
org.apache.jena.fuseki.servlets.CrossOriginFilter
允许起源
*
允许的方法
获取、发布、删除、放置、标题、选项、修补程序
允许的标题
接受,来源,X请求,内容类型,上次修改,授权
暴露标题
访问控制允许来源,访问控制允许凭据

要使CORS工作,必须在目标服务器上启用它,因此在本例中,在Fuseki服务器上启用它。从:

请注意,在CORS体系结构中,访问控制允许来源标头由外部web服务(service.example.com)设置,而不是由原始web应用程序服务器(www.example.com)设置。此处,service.example.com使用CORS允许浏览器授权www.example.com向service.example.com发出请求

这里有一个要点,虽然这是一个合理的警告,但我还没有在我的服务器上尝试过:
要使CORS工作,必须在目标服务器上启用它,因此在本例中,在Fuseki服务器上启用它。从:

请注意,在CORS体系结构中,访问控制允许来源标头由外部web服务(service.example.com)设置,而不是由原始web应用程序服务器(www.example.com)设置。此处,service.example.com使用CORS允许浏览器授权www.example.com向service.example.com发出请求

这里有一个要点,虽然这是一个合理的警告,但我还没有在我的服务器上尝试过:

CORS请求使用
原点
标题,响应将是诸如
访问控制允许原点
等标题


代码将请求中的响应标头设置为标头,并且没有“源代码”。CORS请求使用
源代码
标头,响应将是诸如
访问控制允许源代码
之类的标头


代码将请求中的响应标头设置为标头,并且没有“来源”。

我已更新了我的问题,包括Fuseki文件中的设置。它似乎有CORS设置。仍然不起作用。我已经更新了我的问题,包括从Fuseki文件中看到的设置。它似乎有CORS设置。仍然不起作用。代码似乎在请求中用头设置头。请求需要“Origin:”,请参见上面的
allowedHeaders
:带有have
访问控制允许Origin的响应。非常感谢。这正是我所犯的错误。你能解释一下你是如何解决这个问题的吗?我不理解这个注释。代码似乎在请求中用头设置头。请求需要“Origin:”,请参见上面的
allowedHeaders
:带有have
访问控制允许Origin的响应。非常感谢。这正是我所犯的错误。你能解释一下你是如何解决这个问题的吗?我不明白这个评论。