2012-06-25 48 views
12

的XMLHttpRequest的時候得到這個錯誤信息: Refused to set unsafe header "Origin"拒絕設定不安全頭「原產地」使用谷歌瀏覽

使用此代碼:

function getResponse() { 
      document.getElementById("_receivedMsgLabel").innerHTML += "getResponse() called.<br/>"; 
      if (receiveReq.readyState == 4 || receiveReq.readyState == 0) { 
       receiveReq.open("GET", "http://L45723:1802", true, "server", "server123"); //must use L45723:1802 at work. 
       receiveReq.onreadystatechange = handleReceiveMessage; 
       receiveReq.setRequestHeader("Origin", "http://localhost/"); 
       receiveReq.setRequestHeader("Access-Control-Request-Origin", "http://localhost"); 
       receiveReq.timeout = 0; 
       var currentDate = new Date(); 
       var sendMessage = JSON.stringify({ 
        SendTimestamp: currentDate, 
        Message: "Message 1", 
        Browser: navigator.appName 
       }); 
       receiveReq.send(sendMessage); 

      } 
     } 

我在做什麼錯?我在標題中缺少什麼來使CORS請求起作用?

我試圖消除receiveReq.setRequestHeader("Origin", ...)呼叫,但隨後谷歌瀏覽器在我receiveReq.open()調用拋出訪問錯誤...

爲什麼?

回答

14

這只是一個猜測,因爲我使用jQuery的ajax請求,包括CORS。

我認爲瀏覽器應該設置標題,而不是你。如果您能夠設置標題,則會破壞安全功能的用途。

嘗試請求但不設置這些標頭並查看瀏覽器是否爲您設置它們。

+0

是的:只是刪除你的代碼,設置請求標題「Origin」 - 對我很好! –

-6

你在使用跨域嗎?

嘗試布賴恩氏溶液或試試這個:

,而不是設置爲localhost只是傳遞什麼...看看會發生什麼。

receiveReq.setRequestHeader("Origin", "*"); 
+1

拒絕設置不安全標題「Origin」 –

6

在CORS中,調用代碼不需要做任何特殊的配置。一切都應該由瀏覽器來處理。確定是否允許請求是服務器的工作。因此,無論何時您發出打破SOP策略的請求,瀏覽器都會嘗試爲您提供CORS請求(它會自動添加Origin標頭,並且如果您使用某些不安全的標頭/方法/內容類型,可能會發出預檢請求)。如果服務器支持CORS將作出適當的反應,並允許/提供CORS具體響應頭像

Access-Control-Allow-Origin: * 

請記住,Chrome是非常嚴格的關於「localhost」的主機名不允許的請求。 (至少是我在使用它的時候)。而是使用您的計算機名稱或在「主機」文件中爲其分配另一個別名。因此,例如,不要訪問您的網站,如:

http://localhost:port/myappname 

而是使用:

http://mymachinename:port/myappname 

http://mymachinealias:port/myappname 

欲瞭解更多詳情,請查看specification

相關問題