2012-01-14 15 views
2

我做了簡單的hello world NODEJS服務器。 我有一個enyo Web服務在Chrome運行正試圖在http://localhost:3000enyo給我一個「不允許訪問控制允許來源」,並且不會從nodejs服務器加載內容

訪問的NodeJS服務器時調用的onSuccess方法,沒有數據加載和consule顯示以下錯誤

XMLHttpRequest cannot load http://localhost:3000/. Origin http://localhost:81 is not allowed by Access-Control-Allow-Origin. 

我在瀏覽器中測試了nodejs服務器,它工作正常。

我試圖設置chrome中的--disable-web-security標誌,它沒有工作。

有誰知道如何解決這個問題?如果NOD.js在另一臺服務器上運行,它會工作嗎?這種安全性非常混亂。 Ted

回答

6

出於安全原因,瀏覽器限制腳本可能通過XMLHttpRequest進行的請求。

您的要求才會下如下2種情況成功:

  1. 的URI的來源,你的腳本加載相同頁面的起源在其上運行腳本(本地主機:81本地主機:3000是相同的主機,但不同的來源);
  2. 或者,如果您的瀏覽器支持它,被請求頁面的服務器包含一個Access-Control-Allow-Origin頭部,該頭部明確授權從相關來源(或來自所有來源的頁面)提供的頁面以使XMLHttpRequests它。

嘗試添加Accesss控制允許-Origin標到無論是產生在你的節點碼的響應,在一些代碼,看起來像這樣將報頭:

response.writeHead(200, { 
         'Content-Type': 'text/plain', 
         'Access-Control-Allow-Origin' : 'http://localhost:81' 

         //allow anything by replacing the above with 
         //'Access-Control-Allow-Origin' : '*' 

}); 
+1

只是一個小紙條, Access-Control-Allow-Origin頭不允許使用通配符正則表達式(就像在註釋掉的代碼中),這個值必須是一個有效的起源(例如你的例子中的'http:// localhost:81'),或者值'*'(表示任何來源)。 – monsur 2012-01-15 15:24:34

+0

固定。感謝您的發現。 – ellisbben 2012-01-16 00:20:31

+0

嗨,這個伎倆,謝謝你!!!!!!!!!!!!!!! – 2012-01-16 13:07:40

相關問題