2013-10-17 204 views
3

我正在使用BASEX(一個XML數據庫),並且正嘗試連接到http服務器以使用Ajax執行REST請求。我的代碼在IE中運行良好,但不適用於Firefox或Chrome。我嘗試了兩種方法來查詢ajax。訪問控制允許來源不允許使用AJAX來源

以下是第一條:

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

此代碼在IE,但確實對其他瀏覽器不工作,一些研究,我發現有一個與原點的問題後:

:起源空不被訪問控制允許來源

而第二個允許

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

此代碼適用於IE,並在其他瀏覽器上出現404錯誤。

我試圖把我的劇本WAMP的服務器上,但我得到了同樣的錯誤:

起源的http:/本地主機不被訪問控制允許來源

我允許也試圖用計算機的IP替換本地主機,但我得到了同樣的錯誤。

有人可以幫我嗎?

+3

由於HTTP://本地主機和http://本地主機:8984被視爲不同的域。看到相同的來源政策。 – epascarello

+0

爲您的文件提供服務的服務器必須返回一個標頭,名爲 「Access-Control-Allow-Origin」 ,值爲*以允許所有域或特定域名 – Ahmad

回答

1

正如你所發現的,如果頁面是從磁盤提供的(null origin),一些瀏覽器不允許創建CORS請求。這是因爲它被認爲是安全風險,因爲磁盤上的所有文件(包括/home/myself/mycode.html/tmp/84d8da9/dangerous_trojan.html)共享相同的域:磁盤。如果IE允許這個,那麼它應該被認爲是一個錯誤。事實上,null起源(磁盤)甚至不允許定期的非CORS xmlHTTP請求。

一些瀏覽器甚至進一步不允許本地域(如localhost127.0.0.1::1)發出CORS請求。所以僅從服務器提供頁面是不夠的。

解決方法是給你的頁面一個域名。出於開發目的,您不必購買域名。只需修改瀏覽器所在機器的hosts文件即可。


我可能誤解了你的問題。如果您沒有嘗試CORS請求,那麼錯誤僅僅是由於同源策略(CORS應該解決這個問題)。所以解決方案是簡單地確保網頁和ajax源都來自同一個域。常規非CORS ajax適用於本地域,因此請確保您的網頁和ajax源都從http://localhost/http://localhost:8984/提供。如果您希望localhost能夠向localhost:8984發出ajax請求,則必須在localhost:8984服務器上實施CORS。

2

我想你不能得到它的原因是,一些服務器端編碼是必要的。

嘗試此操作,將Access-Control-Allow-Origin標頭添加到HTTP響應並將值設置爲*。這是您的信息的一段Java代碼。

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

相關問題