編輯:凱文B在下面的評論中回答了我的問題。我添加了一些邏輯來發送一個200請求,如果一個OPTIONS http請求命中我的API來解決這個問題。下面是代碼:CORS請求在發送授權標頭時不起作用
var allowCrossDomain = function(req, res, next) {
if ('OPTIONS' == req.method) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
res.send(200);
}
else {
next();
}
};
router.use(allowCrossDomain);
原題: 我目前想獲得在我的本地運行的離子2應用程序能夠將數據發送到一個Express 4的應用程序。當我發送沒有授權頭的請求時,它可以工作。但是,一旦我添加了auth頭文件,我的API就開始拋出錯誤。我已經做了我的研究,並試圖實現什麼,我在這裏找到:(https://stackoverflow.com/a/15254158/5379931
不過,我仍然得到錯誤,如果我設置訪問控制允許來源是這樣的:
res.header("Access-Control-Allow-Origin", "http://localhost:8100");
我得到這個錯誤:
XMLHttpRequest cannot load URL. Response to preflight request doesn't pass
access control check: The 'Access-Control-Allow-Origin' header has a value
'http://localhost:8100/' that is not equal to the supplied origin. Origin
'http://localhost:8100' is therefore not allowed access.
如果我把我的訪問控制允許來源標題是這樣的:
res.header("Access-Control-Allow-Origin", "http://localhost:8100/");
我得到這個錯誤:
XMLHttpRequest cannot load URL. No 'Access-Control-Allow-Origin' header is
present on the requested resource. Origin 'http://localhost:8100' is
therefore not allowed access. The response had HTTP status code 400.
這裏是我的Express 4的代碼的其餘部分是相關的:
router.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8100");
res.header("Access-Control-Allow-Headers", "Origin, Authorization, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Credentials", true);
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
next();
});
您聲稱自己正在設置的內容與您收到的錯誤消息之間似乎存在不匹配。您引用的第一條消息說:「'Access-Control-Allow-Origin'標頭的值爲 'http:// localhost:8100 /'」,這表示您的服務器配置爲發送值爲http:// localhost:8100 /',尾隨斜線。沒有其他方式可以將斜線添加到值中。然而,當你看到這條消息時,你聲稱你已經配置了服務器發送值「http:// localhost:8100」,沒有結尾的斜槓。這是沒有意義的。我認爲你需要重新檢查 – sideshowbarker
要清楚:服務器需要配置爲發送值爲「http:// localhost:8100」而沒有結尾的斜槓 - 因爲原始值不包含路徑,而「Origin」請求頭瀏覽器發送的是「http:// localhost:8100」(沒有結尾的斜槓),所以你的Access-Control-Allow-Origin必須與*匹配,否則必須是*。 – sideshowbarker
您可能忘記了實際*迴應*選項請求。你確實設置了標題,但是如果你沒有迴應它,你就去你的錯誤處理程序。 –