带有凭据的Webpack-dev-server CORS错误

agh*_*ini 8 javascript cors webpack webpack-dev-server hot-module-replacement

我正在通过热模块重新加载 - 开发服务器获得CORS问题.我在端口上使用dev-server 3000但是应用程序是从另一个端口提供的http://localhost:52024/.

这是我得到的错误(Chrome,Windows 10):

GET http://localhost:3000//sockjs-node/info?t=1502216500095 404 (Not Found)
XMLHttpRequest cannot load http://localhost:3000//sockjs-node/info?t=1502216500095. The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:52024' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
[WDS] Disconnected!
Run Code Online (Sandbox Code Playgroud)

实际上我遇到两个错误:第一个是由//路径中的双斜线引起的,另一个是与CORS相关的错误.这是我的webpack.config.js:

const webpack = require('webpack'),
    path = require('path');

module.exports = {
    entry: {
        'admin': ['webpack-dev-server/client?http://localhost:3000', 'webpack/hot/only-dev-server', './src/admin/index.js']
    },
    output: {
        path: path.join(__dirname, 'admin/dist'),
        filename: '[name].js',
        publicPath: 'http://localhost:3000'
    },
    module: {
        rules: [
            { test: /\.js$/, include: path.join(__dirname, 'src'), use: ['react-hot-loader/webpack', 'babel-loader'] },
            { test: /\.css/, use: ['style-loader', 'css-loader'] },
            { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
            { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: ['url-loader?limit=10000&mimetype=application/font-woff'] },
            { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: ['file-loader'] },
            { test: /\.(png|jpg)$/, use: ['url-loader?limit=8192'] }
        ]
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
    ],
    devtool: 'cheap-module-eval-source-map',
    devServer: {
        port: 3000,
        hot: true,
        inline: true,
        headers: {
            "Access-Control-Allow-Origin": "*"
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我正在启动webpack:

webpack-dev-server --config webpack.config.js --progress
Run Code Online (Sandbox Code Playgroud)

任何的想法?我正在使用webpack 3.5.1并且webpack-dev-server 2.7.1谢谢你.

sid*_*ker 5

至于修复CORS问题,您可以执行以下操作之一:

  • 在您的webpack.config.js硬编码中http://localhost:52024作为允许的原点进入Access-Control-Allow-Origin响应头的值:

    headers: {
        "Access-Control-Allow-Origin": "http://localhost:52024"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    当然,一旦为您的应用程序设置了生产服务器/域,请将其更改http://localhost:52024为生产源.

    当然,随之而来的最大限制是,只允许在原点运行的应用程序从该webpack服务器跨域获取响应.

  • 或者,在处理响应请求的webpack dev服务器上运行的任何其他应用程序代码中,您需要获取Origin请求标头的值,并将其回显到Access-Control-Allow-Origin响应标头值:

    response.setHeader('Access-Control-Allow-Origin', request.headers.origin)
    
    Run Code Online (Sandbox Code Playgroud)

    这会产生与Access-Control-Allow-Origin: *导致浏览器允许在任何来源运行的任何前端JavaScript访问响应相同的效果- 但它也会阻止浏览器强制执行"... *当请求的凭据时不能是通配符模式是include"限制,否则会受到打击.


更新:在任何一种情况下,您还需要发送Access-Control-Allow-Credentials带有该值的响应标头,true以便如果请求中包含凭据,则浏览器允许您的前端JavaScript代码访问响应.