Express 应用中请求的资源上不存在 'Access-Control-Allow-Origin' header
No 'Access-Control-Allow-Origin' header is present on the requested resource in Express app
我有一个 Express 应用程序 运行 与我的 Web 应用程序在同一台服务器上。我正在尝试向我的 Express 应用发出 XMLHttpRequest,但出现此错误:
Access to XMLHttpRequest at 'http://10.0.0.222:9999/' from origin 'http://10.0.0.222:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
虽然在我的应用程序中这个 header 显然是 'present'。
应用代码:
var cors = require('cors')
const util = require('util');
var inspect = require('eyes').inspector({maxLength: false})
const express = require('express');
var bodyParser = require('body-parser')
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var corsOptions = {
origin: 'http://10.0.0.222:8080',
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.post('/', cors(corsOptions), function (req, res) {
console.dir(req.body, {depth: null});
res.send('a');
});
const PORT = process.env.PORT || 9999;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}...`);
});
XMLHttp请求代码:
var xhr = new XMLHttpRequest();
xhr.open("POST", 'http://10.0.0.222:9999', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(goodJSON)
即使 origin 选项包含我的 Web 应用程序的主机,为什么我仍然会收到此错误?
它不会工作,因为你已经将 headers 放在基本路线中,即 /
。
解析路由前必须检查headers。在您的情况下,路线已经解决,然后您正在应用 cors
headers.
使用这个:
app.use('/', cors(corsOptions)); or app.use(cors(corsOptions));
app.post('/', function (req, res) {
console.dir(req.body, {depth: null});
res.send('a');
});
在 app.use
中应用 cors 将添加 headers。之后该路径将被解析并且不会抛出错误
错误消息说:
Response to preflight request
preflight 是一个 OPTIONS 请求,请求获得允许才能发出实际请求。
您的处理程序只接受 POST 请求,因此 OPTIONS 请求没有所需的 headers。
文档具体涵盖 preflight requests:
app.options('/', cors(corsOptions));
我有一个 Express 应用程序 运行 与我的 Web 应用程序在同一台服务器上。我正在尝试向我的 Express 应用发出 XMLHttpRequest,但出现此错误:
Access to XMLHttpRequest at 'http://10.0.0.222:9999/' from origin 'http://10.0.0.222:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
虽然在我的应用程序中这个 header 显然是 'present'。 应用代码:
var cors = require('cors')
const util = require('util');
var inspect = require('eyes').inspector({maxLength: false})
const express = require('express');
var bodyParser = require('body-parser')
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var corsOptions = {
origin: 'http://10.0.0.222:8080',
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.post('/', cors(corsOptions), function (req, res) {
console.dir(req.body, {depth: null});
res.send('a');
});
const PORT = process.env.PORT || 9999;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}...`);
});
XMLHttp请求代码:
var xhr = new XMLHttpRequest();
xhr.open("POST", 'http://10.0.0.222:9999', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(goodJSON)
即使 origin 选项包含我的 Web 应用程序的主机,为什么我仍然会收到此错误?
它不会工作,因为你已经将 headers 放在基本路线中,即 /
。
解析路由前必须检查headers。在您的情况下,路线已经解决,然后您正在应用 cors
headers.
使用这个:
app.use('/', cors(corsOptions)); or app.use(cors(corsOptions));
app.post('/', function (req, res) {
console.dir(req.body, {depth: null});
res.send('a');
});
在 app.use
中应用 cors 将添加 headers。之后该路径将被解析并且不会抛出错误
错误消息说:
Response to preflight request
preflight 是一个 OPTIONS 请求,请求获得允许才能发出实际请求。
您的处理程序只接受 POST 请求,因此 OPTIONS 请求没有所需的 headers。
文档具体涵盖 preflight requests:
app.options('/', cors(corsOptions));