Express,React,& Webpack:CORS Preflight问题 - 无法在GET中传递标头

时间:2018-04-02 16:37:58

标签: node.js reactjs express cors webpack-dev-server

MacOS上的React 16和Node 9.9。使用Webpack Dev Server进行测试。我正在尝试在GET请求中传递标头,但它们无法完成。

在服务器上,我允许一切:

app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,PUT,POST,DELETE,OPTIONS");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, value1, value2, value3");
    next();
});

我的客户请求是使用Axios进行的,如下所示:

const request = axios({
    method: "GET",
    url: `http://my.api.co/endpoint`,
    headers: {
        "value1": "1",
        "value2": "2",
        "value3": "3"
    }
});

检查传入请求时,req.headers不包含这些值,但我可以看到请求中的键(而不是值)。

我明白了:

req.headers.access-control-request-headers:"value1,value2,value3"

...和req.rawHeaders中的相同。但我无法掌握价值观 - 他们没有通过。我无法访问以下内容,例如:

req.headers.value1

我认为这与“预检”有关,但我不确定如何在狩猎后解决问题。找不到直接的答案。对于每种类型的请求,我都需要这个,而不仅仅是GET。如何从Axios将标头传递到服务器?

问题严格来说是webpack-dev-server吗?当我不使用它时,我会看到差异吗?如果它的制作会有所不同,我肯定想知道我的步骤是什么。

1 个答案:

答案 0 :(得分:0)

对不起,我这个简单的错误。 OP中的中间件需要移动到中间件块之上,我实际上正在检查那些头值。我误解了它是如何工作的。现在好了!