2016-11-11 57 views
0

我使用在Heroku上的快速應用。我嘗試從另一個NodeJS應用程序對它進行RESTful請求。迴應預檢要求未通過訪問控制檢查的NodeJS/Heroku的/快遞

下面是從Heroku的應用程序的一個片段,稱爲app.js

var express=  require("express"); 
app.get("/results",function(req,res){ 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); 
}); 

下面是從一個應用程序,我在本地運行一個片段,local-app.js

var request=  require("superagent"); 
var req=   request.get("http://url-to-app-js.com?query=1").set(
    "Access-Control-Allow-Origin", "http://url-to-app-js.com", 
    "Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS", 
    "Access-Control-Allow-Headers", "Content-Type, Authorization, Content-Length, X-Requested-With" 
); 
req.end(function(err,res){ 
    // do things 
}); 

當我運行local-app.js,我得到這個在我的瀏覽器控制檯錯誤:esponse to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

我知道我可以運行瀏覽器,鉻,具有一定的安全設置已關閉,但我需要能夠在不這樣做的情況下運行此操作。

我在做什麼錯?我如何解決它?

+0

沒有ü以往任何時候都得到這個工作? –

回答

0

Access-Control-Allow-OriginAccess-Control-Allow-Methods,和Access-Control-Allow-Headers響應頭。他們不應該出現在請求中。

通過添加非標頭您做出請求預檢請求,而不是一個簡單的請求。 (您可能正在做其他事情,使其成爲預檢請求,但額外的頭文件肯定無濟於事)。

預先發送的請求在發出請求之前(在這種情況下爲GET)發出OPTIONS請求以查明它是否被CORS允許。

當您收到一個GET請求,你只設置CORS響應頭。由於您沒有迴應OPTIONS請求,因此瀏覽器拒絕發出GET請求。

+0

我需要更改哪些內容才能解決此問題? (我不是很熟悉這種頭...) – Username

+0

從**開始不設置頭我說你不應該設置** – Quentin

+0

如果這不起作用,然後寫一些代碼來處理選項請求。 – Quentin

相關問題