javascript - Estoy recibiendo un mensaje de "Encabezado de host no válido" al conectarme a webpack-dev-server de forma remota
Estoy utilizando como entorno, un IDE en línea Ubuntu VM de Cloud9.io y he reducido mediante la solución de problemas este error a simplemente ejecutar la aplicación con el servidor de desarrollo de Webpack.
Lo lanzo con:
webpack-dev-server -d --watch --history-api-fallback --host $IP --port $PORT
$IP es una variable que tiene la dirección del host $PORT tiene el número de puerto.
Se me indica usar estas variables al desplegar una aplicación en Cloud 9, ya que tienen la información predeterminada de IP y PUERTO.
El servidor se inicia y compila el código, sin problema, sin embargo, no me está mostrando el archivo índice. Solo una pantalla en blanco con "Invalid Host header" como texto.
Esta es la solicitud:
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
Este es mi 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"
}
}
Esto es el 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
}
}
El servidor de desarrollo de Webpack está devolviendo esto debido a la configuración de mi host. En webpack-dev-server/lib/Server.js línea 60. Desde https://github.com/webpack/webpack-dev-server
Mi pregunta es cómo configurar para pasar correctamente esta verificación. Cualquier ayuda sería muy apreciada.
Respuesta #1
El problema ocurre porque webpack-dev-server 2.4.4 agrega una verificación de host. Puedes desactivarla agregando esto a tu configuración de webpack:
devServer: {
compress: true,
disableHostCheck: true, // That solved it
}
Por favor, ten en cuenta que esta solución es insegura.
Por favor, vea esta respuesta para una solución segura.
La opción fue refactorizada en la versión 4.0.0. Ahora se debe usar la opción allowedHosts:
devServer: {
allowedHosts: "all"
}
Respuesta #2
Descubrí que necesito establecer la propiedad public de devServer, al valor del host de mi solicitud. Siendo que se mostrará en esa dirección externa.
Así que necesitaba esto en mi webpack.config.js
devServer: {
compress: true,
public: 'store-client-nestroia1.c9users.io' // That solved it
}
Otra solución es usarlo en la CLI:
webpack-dev-server --public $C9_HOSTNAME <-- var for Cloud9 external IP
Respuesta #3
Esto es lo que funcionó para mí:
Agrega allowedHosts bajo devServer en tu webpack.config.js:
devServer: {
compress: true,
inline: true,
port: '8080',
allowedHosts: [
'.amazonaws.com'
]
},
No necesitaba usar los parámetros --host o --public.
Respuesta #4
En lugar de editar el archivo de configuración de webpack, la forma más fácil de desactivar la verificación del host es añadiendo un archivo .env a tu carpeta raíz y poniendo esto:
DANGEROUSLY_DISABLE_HOST_CHECK=true
Como el nombre de la variable lo implica, desactivarla es inseguro y solo se aconseja usar en el entorno de desarrollo.
Respuesta #5
Agrega esta configuración a tu archivo de configuración de webpack al usar webpack-dev-server (aún puedes especificar el host como 0.0.0.0).
devServer: {
disableHostCheck: true,
host: '0.0.0.0',
port: 3000
}
Respuesta #6
La opción más segura sería agregar allowedHosts a tu configuración de Webpack de esta manera:
module.exports = {
devServer: {
allowedHosts: [
'host.com',
'subdomain.host.com',
'subdomain2.host.com',
'host2.com'
]
}
};
El arreglo contiene todos los hosts permitidos, también puedes especificar subdominios. Consulta más aquí
Respuesta #7
Si aún no has expulsado de CRA, no puedes modificar fácilmente tu configuración de webpack. El archivo de configuración está oculto en node_modules/react_scripts/config/webpackDevServer.config.js. Se desaconseja cambiar esa configuración.
En su lugar, puedes simplemente configurar la variable de entorno DANGEROUSLY_DISABLE_HOST_CHECK a true para desactivar la verificación del host:
DANGEROUSLY_DISABLE_HOST_CHECK=true yarn start
or the equivalent npm command
