【问题标题】:Failing CORS on ajax requests to Neo4j对 Neo4j 的 ajax 请求的 CORS 失败
【发布时间】:2014-11-18 00:14:48
【问题描述】:

我正在尝试使用 Backbone.js 模型来访问 Neo4j 内容。我不明白为什么以下通信未通过跨域检查:

首先是 OPTIONS 请求:

Request URL:http://localhost:7474/db/data/cypher
Request Method:OPTIONS
Status Code:204 No Content
Request Headers
  Accept:*/*
  Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
  Accept-Encoding:gzip,deflate,sdch
  Accept-Language:en-US,en;q=0.8
  Access-Control-Request-Headers:origin, content-type, accept
  Access-Control-Request-Method:POST
  Connection:keep-alive
  Host:localhost:7474
  Origin:http://localhost:3000
  Referer:http://localhost:3000/test/
  User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11
Response Headers
  Access-Control-Allow-Headers:origin, content-type, accept
  Access-Control-Allow-Methods:POST
  Access-Control-Allow-Origin:*
  Allow:OPTIONS,POST
  Server:Jetty(6.1.25)

然后是 POST 请求:

Request URL:http://localhost:7474/db/data/cypher
Request Headers
  Accept:application/json, text/javascript, */*; q=0.01
  Content-Type:application/json
  Origin:http://localhost:3000
  Referer:http://localhost:3000/test/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11
Request Payload
  start n=node(0) match n-[:hasClass]->c where c.className=Collection return c

我得到控制台错误:

OPTIONS http://localhost:7474/db/data/cypher 204 (No Content) jquery-1.7.2.min.js:4
XMLHttpRequest cannot load http://localhost:7474/db/data/cypher. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

据我所知,该请求应该被允许,因为预检请求说 Access-Control-Allow-Origin: *.有什么建议么?有什么我想念的吗? 谢谢!

【问题讨论】:

    标签: jquery ajax neo4j cors


    【解决方案1】:

    CORS 在现已弃用的旧 Cypher HTTP 端点上失败。
    http://neo4j.com/docs/stable/rest-api-cypher.html

    新的 Transactional Cypher HTTP Endpoint 似乎没有出现此问题。
    http://neo4j.com/docs/stable/rest-api-transactional.html

    【讨论】:

      【解决方案2】:

      您似乎正在使用 Chrome,我认为 this bug 可能与此有关。

      Ticket #67743: Access-Control-Allow-Origin: * doesn't match localhost
      

      【讨论】:

        【解决方案3】:

        自从我处理跨域请求以来已经很长时间了,但可能是由于某种方式缺少标头。不过不确定。请注意,不遵守请求是由您的浏览器生成的,可能值得检查一下您的浏览器对 x-origin 施加了哪些限制。例如,如果您使用的是 file:// url,许多浏览器都不允许这样做。

        对跨源请求的支持不是 Neo4j 服务器的记录功能,它存在是出于遗留原因,并且很可能出于安全原因将其删除(因为没有额外的安全层,如果攻击者知道它的 URL)。

        虽然它可能值得允许它作为默认设置..

        【讨论】:

          猜你喜欢
          • 2013-12-06
          • 2021-11-19
          • 2015-04-03
          • 2021-03-11
          • 1970-01-01
          • 2017-05-20
          • 2019-07-17
          • 1970-01-01
          相关资源
          最近更新 更多