Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I am getting an "Invalid Host header" message when connecting to webpack-dev-server remotely

I am using as an environment, a Cloud9.io ubuntu VM Online IDE and I have reduced by troubleshooting this error to just running the app with Webpack dev server.

I launch it with:

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

$IP is a variable that has the host address $PORT has the port number.

I am instructed to use these vars when deploying an app in Cloud 9, as they have the default IP and PORT info.

The server boots up and compiles the code, no problem, it is not showing me the index file though. Only a blank screen with "Invalid Host header" as text.

This is the Request:

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 

This is my 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"   } } 

This is the 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 dev server is returning this because of my host setup. In webpack-dev-server/lib/Server.js line 60. From https://github.com/webpack/webpack-dev-server

My question is how do I setup to correctly pass this check. Any help would be greatly appreciated.

like image 857
Artur Vieira Avatar asked Apr 25 '17 19:04

Artur Vieira


2 Answers

The problem occurs because webpack-dev-server 2.4.4 adds a host check. You can disable it by adding this to your webpack config:

 devServer: {     compress: true,     disableHostCheck: true,   // That solved it   }       

EDIT: Please note, this fix is insecure.

Please see the following answer for a secure solution: https://stackoverflow.com/a/43621275/5425585

like image 175
刘芳友 Avatar answered Sep 24 '22 01:09

刘芳友


I found out, that I need to set the public property of devServer, to my request's host value. Being that it will be displayed at that external address.

So I needed this in my webpack.config.js

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

Another solution is using it on the CLI:

webpack-dev-server --public $C9_HOSTNAME   <-- var for Cloud9 external IP 
like image 40
Artur Vieira Avatar answered Sep 22 '22 01:09

Artur Vieira