access-control-allow-origin不允许使用AJAX origin null

时间:2013-10-17 13:15:27

标签: javascript jquery ajax rest basex

我正在使用BASEX(XML数据库),我正在尝试使用Ajax连接到http服务器以执行REST请求。我的代码在IE中运行良好,但不适用于Firefox或Chrome。我为ajax查询尝试了两种方法。

这是第一个:

var jqxhr = $.get( "http://localhost:8984/rest/factbook?query=//city&wrap=yes", function(data)

此代码适用于IE但不适用于其他浏览器,经过一些研究后我发现原点存在问题:

  access-control-allow-origin

不允许

origin null

第二个:

$.ajax({
    type: "GET",
    url: "http://localhost:8984/rest/factbook?query=//city&wrap=yes",
    contentType: "xml/application",
    dataType: "xml",

此代码适用于IE,并在其他浏览器上出现404错误。

我试图将我的脚本放在wamp服务器上,但我得到了同样的错误:

  

来源http:/ localhost不允许使用access-control-allow-origin

我也尝试用计算机的ip替换本地主机但是我得到了同样的错误。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

我想你无法让它工作的原因是需要一些服务器端编码。

尝试此操作,将Access-Control-Allow-Origin标头添加到HTTP响应并将值设置为*。这是您的信息的一段Java代码。

response.setHeader("Access-Control-Allow-Origin", "*")

答案 1 :(得分:1)

正如您所发现的,如果页面是从磁盘(null原点)提供的,某些浏览器不允许进行CORS请求。这是因为它被认为是一种安全风险,因为磁盘上的所有文件(包括/home/myself/mycode.html/tmp/84d8da9/dangerous_trojan.html共享同一个域:磁盘。如果IE允许这样,则应将其视为错误。实际上,null origin(磁盘)甚至不允许常规的非CORS xmlHTTPrequest。

有些浏览器甚至不允许localhost127.0.0.1::1等本地域发出CORS请求。因此仅从服务器上提供页面是不够的。

解决方法是为您的网页提供域名。出于开发目的,您无需购买域名。只需修改浏览器所在机器的hosts文件即可。


我可能误解了你的问题。如果您没有尝试CORS请求,那么错误只是由于同源策略(CORS应该解决这个问题)。因此,解决方案是简单地确保网页和ajax源都来自同一个域。常规的非CORS ajax适用于本地域,因此请确保从http://localhost/http://localhost:8984/提供您的网页和ajax源。如果您希望localhost能够向localhost:8984发出ajax请求,则必须在localhost:8984服务器上实施CORS。