2017-04-25 12 views
53

Używam jako środowiska, IDE VM Online Cloud9.io Ubuntu i zmniejszyłem je, rozwiązując ten problem błąd po prostu uruchomieniu aplikacji z serwerem deweloperskim Webpack.Otrzymuję komunikat "Nieprawidłowy nagłówek hosta", gdy uruchomię moją aplikację React na serwerze dewelopera Webpacka na Cloud9.io

I uruchomić go z:

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

$ IP jest zmienną, która ma adres hosta $ port ma numer portu.

Mam instrukcje używania tych zmiennych podczas wdrażania aplikacji w Cloud 9, ponieważ mają one domyślny adres IP i PORT.

Serwer uruchamia się i kompiluje kod, nie ma problemu, to nie pokazuje mi jednak plik indeksu. Tylko pusty ekran z "Nieprawidłowy nagłówek hosta" jako tekst.

To Żądanie:

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 

To mój 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" 
    } 
} 

Jest to 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 serwer dev zwrócenie tego z powodu konfiguracji mojego hosta. W webpack-dev-server/lib/Server.js wiersz 60. Od https://github.com/webpack/webpack-dev-server

Moje pytanie brzmi: jak skonfigurować, aby poprawnie przejść tę kontrolę. Każda pomoc będzie bardzo ceniona.

+0

Wydaje się, że problem leży poza zakresem komentarza. – elmeister

+0

Nie rozumiem, jak to się dzieje. Czy możesz wskazać mi właściwy kierunek? –

Odpowiedz

42

Dowiedziałem się, że muszę ustawić właściwość devServer na public, na wartość hosta mojego żądania. Jest to wyświetlane pod tym adresem zewnętrznym.

Więc musiałem to w moich webpack.config.js

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

Innym rozwiązaniem jest użycie go na CLI:

WebPACK-dev-serwer --public $ C9_HOSTNAME < - VaR Cloud9 zewnętrzne IP

+1

Napotkano to także dzisiaj! Dziękujemy za publikację! – JohnnyQ

+4

Po prostu wpadł na to dzisiaj. Wygląda na to, że 'webpack-dev-server' ostatnio wprowadził tę zmianę, wymagając poprawnego nagłówka hosta. Zobacz https://github.com/webpack/webpack-dev-server/releases/tag/v2.4.3, aby uzyskać więcej informacji. – Kaitrono

+1

Zmiana dotyczy także pakietu webpack-dev-server 1.16.4. Możesz przeczytać więcej na ten temat tutaj: https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a. –

119

Rozwiązałem z tym, beacuse WebPACK-dev-serwer 2.4.4 dodać sprawdzanie hosta

devServer: { 

    compress: true, 

    disableHostCheck: true, // That solved it 

}  
+3

To również rozwiązało dla mnie ... dzięki – John

+6

Jest to problem bezpieczeństwa. Użyj opcji publicznej, aby określić konkretną dozwoloną nazwę hosta. Więcej informacji można znaleźć na stronie https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a. – SystemParadox

+1

sama opcja publiczna nie działa dla mnie ... disableHostCheck to jedyna rzecz, która to rozwiązała: \ – davidkomer

2

Edit node_modules/webpack-dev-server/lib/Server.js linia 425 aktualizacja linia jako

return true; 
0

Jeśli używasz tworzyć reagują aplikacji na C9 wystarczy uruchomić to polecenie, aby rozpocząć

npm run start --public $C9_HOSTNAME 

i dostęp do aplikacji z jakiegokolwiek swojej nazwy hosta to (np. wpisz $C_HOSTNAME w terminalu, aby uzyskać nazwę hosta)

Powiązane problemy