我收到一个“无效的主机头”的消息,我运行的应用程序作出反应的的WebPack开发服务器上Cloud9.io

问题描述:

我使用的是一个环境,一个Cloud9.io Ubuntu的虚拟机联机IDE

时,我已经被解决此减少错误,只是用Webpack dev服务器运行应用程序。我收到一个“无效的主机头”的消息,我运行的应用程序作出反应的的WebPack开发服务器上Cloud9.io

webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT 

$ IP是具有主机地址 $端口具有端口号的变量:

我启动它。

我奉命在云9部署应用程序时使用这些增值经销商,因为他们有默认的IP和端口信息。

服务器启动并编译代码,没问题,它是不是虽然给我看索引文件。只有一个带有“无效主机标题”的空白屏幕作为文本。

这是请求:

GET/HTTP/1.1 
Host: store-client-nestroia1.c9users.io 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
DNT: 1 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 

这是我的package.json:

{ 
    "name": "workspace", 
    "version": "0.0.0", 
    "scripts": { 
    "dev": "webpack -d --watch", 
    "server": "webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT", 
    "build": "webpack --config webpack.config.js" 
    }, 
    "author": "Artur Vieira", 
    "license": "ISC", 
    "dependencies": { 
    "babel-core": "^6.18.2", 
    "babel-loader": "^6.2.8", 
    "babel-preset-es2015": "^6.18.0", 
    "babel-preset-react": "^6.16.0", 
    "babel-preset-stage-0": "^6.24.1", 
    "file-loader": "^0.11.1", 
    "node-fetch": "^1.6.3", 
    "react": "^15.5.4", 
    "react-bootstrap": "^0.30.9", 
    "react-dom": "^15.5.4", 
    "react-router": "^4.1.1", 
    "react-router-dom": "^4.1.1", 
    "url-loader": "^0.5.8", 
    "webpack": "^2.4.1", 
    "webpack-dev-server": "^2.4.4", 
    "whatwg-fetch": "^2.0.3" 
    } 
} 

这是webpack.config.js:

const path = require('path'); 

module.exports = { 

    entry: ['whatwg-fetch', "./app/_app.jsx"], // string | object | array 
    // Here the application starts executing 
    // and webpack starts bundling 
    output: { 
    // options related to how webpack emits results 

    path: path.resolve(__dirname, "./public"), // string 
    // the target directory for all output files 
    // must be an absolute path (use the Node.js path module) 

    filename: "bundle.js", // string 
    // the filename template for entry chunks 

    publicPath: "/public/", // string 
    // the url to the output directory resolved relative to the HTML page 
    }, 

    module: { 
    // configuration regarding modules 

    rules: [ 
     // rules for modules (configure loaders, parser options, etc.) 
     { 
     test: /\.jsx?$/, 
     include: [ 
      path.resolve(__dirname, "./app") 
     ], 
     exclude: [ 
      path.resolve(__dirname, "./node_modules") 
     ], 
     loader: "babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0", 
     // the loader which should be applied, it'll be resolved relative to the context 
     // -loader suffix is no longer optional in webpack2 for clarity reasons 
     // see webpack 1 upgrade guide 
     }, 
     { 
     test: /\.css$/, 
     use: [ 'style-loader', 'css-loader' ] 
     }, 
     { 
     test: /\.(png|jpg|jpeg|gif|svg|eot|ttf|woff|woff2)$/, 
     loader: 'url-loader', 
     options: { 
      limit: 10000 
     } 
     } 
    ] 
    }, 

    devServer: { 
    compress: true 
    } 
} 

的WebPack开发服务器是由于我的主机设置而返回。在webpack-dev-server/lib/Server.js行60.从https://github.com/webpack/webpack-dev-server

我的问题是我如何设置正确通过此检查。任何帮助将不胜感激。

+0

看来问题是出了评价范围(在终端获取的主机名例如类型$C_HOSTNAME)。 – elmeister

+0

我不明白的问题是如何发生的。你能指出我正确的方向吗? –

我发现,我需要设置devServer的public财产,我的请求的主机值。因为它将显示在该外部地址。

所以,我需要这在我的webpack.config.js

devServer: { 
    compress: true, 
    public: 'store-client-nestroia1.c9users.io' // That solved it 
} 

另一种解决方案是使用它的CLI:

的WebPack-DEV-服务器--public $ C9_HOSTNAME < - VAR的CLOUD9外部IP

+1

遇到这样今天呢!感谢您的发表! – JohnnyQ

+4

今天也碰到了这个。它看起来像'webpack-dev-server'最近做了这个改变需要正确的主机头。有关更多信息,请参阅https://github.com/webpack/webpack-dev-server/releases/tag/v2.4.3。 – Kaitrono

+1

该更改也会影响webpack-dev-server 1.16.4。你可以在这里阅读更多关于它的信息:https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a。 –

我解决了这个问题,怎么一回事,因为的WebPack-DEV-服务器2.4.4添加主机检查

devServer: { 

    compress: true, 

    disableHostCheck: true, // That solved it 

}  
+3

这也解决了我...谢谢 – John

+6

这是一个安全问题。改用public选项来指定允许的主机名。有关更多信息,请参阅https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a。 – SystemParadox

+1

公共选项本身并不适用于我... disableHostCheck是唯一解决它的方法:\ – davidkomer

编辑node_modules/webpack-dev-server/lib/Server.js线425 更新的行

return true; 

如果您正在使用创建反应的应用程式中C9只要运行这个命令来启动

npm run start --public $C9_HOSTNAME 

而且无论从任何主机名访问应用程序是