Tôi đang nhận được một tin nhắn Tiêu đề máy chủ không hợp lệ của người dùng, khi chạy ứng dụng React của tôi trong máy chủ phát triển Webpack trên Cloud9.io


176

Tôi đang sử dụng như một môi trường, IDE IDE trực tuyến của Cloud9.io và tôi đã giảm bằng cách khắc phục lỗi này khi chỉ chạy ứng dụng với máy chủ phát triển Webpack.

Tôi khởi chạy nó với:

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

$ IP là một biến có địa chỉ máy chủ $ PORT có số cổng.

Tôi được hướng dẫn sử dụng các vars này khi triển khai một ứng dụng trong Cloud 9, vì chúng có thông tin IP và PORT mặc định.

Máy chủ khởi động và biên dịch mã, không vấn đề gì, nó không hiển thị cho tôi tệp chỉ mục. Chỉ một màn hình trống với "Tiêu đề máy chủ không hợp lệ" dưới dạng văn bản.

Đây là Yêu cầu:

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

Đây là gói.json của tôi:

{
  "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"
  }
}

Đây là 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 đang trả lại điều này vì thiết lập máy chủ của tôi. Trong dòng webpack-dev-server / lib / Server.js 60. Từ https://github.com/webpack/webpack-dev-server

Câu hỏi của tôi là làm thế nào để tôi thiết lập để vượt qua kiểm tra này một cách chính xác. Mọi sự trợ giúp sẽ rất được trân trọng.


Có vẻ như vấn đề nằm ngoài phạm vi nhận xét.
elmeister

Tôi không hiểu vấn đề đang xảy ra như thế nào. Bạn có thể chỉ cho tôi hướng đi đúng?
Artur Vieira

Vâng, hóa ra trong trường hợp của tôi, câu trả lời hàng đầu đã làm việc.
MrMesees 16/03/19

Câu trả lời:


311

Sự cố xảy ra vì webpack-dev-server2.4.4 thêm kiểm tra máy chủ. Bạn có thể vô hiệu hóa nó bằng cách thêm nó vào cấu hình webpack của bạn:

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

 }      

EDIT: Xin lưu ý, sửa chữa này là không an toàn.

Vui lòng xem câu trả lời sau để có giải pháp an toàn: https://stackoverflow.com/a/43621275/5425585


13
Đây là một vấn đề bảo mật. Sử dụng tùy chọn công khai thay vì để chỉ định tên máy chủ được phép. Xem Medium.com/webpack/ trên để biết thêm thông tin.
SystemParadox

5
lựa chọn công cộng một mình không làm việc cho tôi ... disableHostCheck là điều duy nhất mà giải quyết nó: \
davidkomer

@davidkomer giống tôi. Điều duy nhất hoạt động là vô hiệu hóa HostCheck ...
irl_irl

6
Đó là một vấn đề bảo mật nếu bạn đang sử dụng máy chủ phát triển webpack cho bất cứ điều gì khác ngoài nhà phát triển địa phương.
AlienWebguy

Cái này cũng có tác dụng với tôi. Trường hợp của tôi là tôi đang sử dụng bản cài đặt Multisite Worpdress của bitnami, được phục vụ trên 192.168.0.106.xip.io. Điều kỳ lạ là, tôi đã có thể làm việc trên bản cài đặt Apache Linux cũ của mình mà không cần "sửa lỗi" này. Không phải tôi đã chuyển sang gói Bitnami mà vấn đề này xuất hiện.
Lai web dev

103

Tôi phát hiện ra rằng tôi cần đặt thuộc publictính của devServer, thành giá trị máy chủ yêu cầu của tôi. Là nó sẽ được hiển thị tại địa chỉ bên ngoài.

Vì vậy, tôi cần điều này trong webpack.config.js của tôi

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

Một giải pháp khác là sử dụng nó trên CLI:

webpack-dev-server - công khai $ C9_HOSTNAME <- var cho IP bên ngoài Cloud9


1
Gặp phải ngày hôm nay quá! Cảm ơn đã đăng bài viết!
JohnnyQ

5
Cũng vừa mới chạy vào hôm nay. Có vẻ như webpack-dev-servergần đây đã thực hiện thay đổi này yêu cầu tiêu đề máy chủ chính xác. Xem github.com/webpack/webpack-dev-server/release/tag/v2.4.3 để biết thêm thông tin.
Kaitrono

2
Thay đổi cũng ảnh hưởng đến webpack-dev-server 1.16.4. Bạn có thể đọc thêm về nó ở đây: Medium.com/webpack/ .
Tyler Collier

1
Điều này cũng làm việc cho tôi khi tôi Invalid Host headergặp lỗi trong một dự án vue cli.
Timmy Von Heiss

43

Đây là những gì làm việc cho tôi:

Thêm các máy chủ được phép dưới devServer trong webpack.config.js của bạn:

devServer: {
  compress: true,
  inline: true,
  port: '8080',
  allowedHosts: [
      '.amazonaws.com'
  ]
},

Tôi không cần sử dụng thông số --host hoặc --public.


Nếu bạn có HotModuleReload, có vẻ như publicparam là thứ đặt URL được sử dụng làm mục tiêu cho điều đó (nếu nó không thể đoán nó từ cách trang được phục vụ, thì đối với tôi nó không thể).
Tom Saleeba

15

Thêm cấu hình này vào tệp cấu hình webpack của bạn khi sử dụng webpack-dev-server (bạn vẫn có thể chỉ định máy chủ là 0.0.0.0).

devServer: {
    disableHostCheck: true,
    host: '0.0.0.0',
    port: 3000
}

2
Điều này cũng hoạt động cho cấu hình Vue.js vue-cli mới: github.com/vuejs/vue-cli/blob/dev/docs/config.md
CenterOrbit

9

Tùy chọn an toàn hơn sẽ là thêm các máy chủ được phép vào cấu hình Webpack của bạn như thế này:

module.exports = {
devServer: {
 allowedHosts: [
  'host.com',
  'subdomain.host.com',
  'subdomain2.host.com',
  'host2.com'
   ]
  }
};

Mảng chứa tất cả các máy chủ được phép, bạn cũng có thể chỉ định subdomians. xem thêm tại đây


5

Nếu bạn chưa đẩy ra khỏi CRA, bạn không thể dễ dàng sửa đổi cấu hình gói webpack của mình. Các tập tin cấu hình được ẩn trong node_modules/react_scripts/config/webpackDevServer.config.js. Bạn không khuyến khích thay đổi cấu hình đó.

Thay vào đó, bạn chỉ có thể thiết lập các biến môi trường DANGEROUSLY_DISABLE_HOST_CHECKđể truevô hiệu hóa việc kiểm tra máy chủ:

DANGEROUSLY_DISABLE_HOST_CHECK=true yarn start  
# or the equivalent npm command

1
Cảm ơn bạn, Lukas Kalbertodt, câu trả lời tốt nhất. Tôi đã sử dụng: xuất DANGEROUSLY_DISABLE_HOST_CHECK = true; bắt đầu từ npm
Mark Kahn

3

Thay vì chỉnh sửa tệp cấu hình webpack, cách dễ dàng hơn để vô hiệu hóa kiểm tra máy chủ là thêm một .envtệp vào thư mục gốc của bạn và đặt tệp này:

DANGEROUSLY_DISABLE_HOST_CHECK=true

Như tên biến ngụ ý, việc vô hiệu hóa nó là không an toàn và chỉ nên sử dụng trong môi trường dev.


2

Nếu bạn đang sử dụng ứng dụng tạo phản ứng trên C9, chỉ cần chạy lệnh này để bắt đầu

npm run start --public $C9_HOSTNAME

Và truy cập ứng dụng từ bất kỳ tên máy chủ nào của bạn (ví dụ: nhập $C_HOSTNAMEvào thiết bị đầu cuối để lấy tên máy chủ)


0

Nếu bạn đang chạy webpack-dev-servertrong một container và đang gửi yêu cầu đến nó thông qua tên container của nó, bạn sẽ gặp lỗi này. Để cho phép các yêu cầu từ các vùng chứa khác trên cùng một mạng, chỉ cần cung cấp tên vùng chứa (hoặc bất kỳ tên nào được sử dụng để phân giải vùng chứa) bằng --publictùy chọn. Điều này tốt hơn là vô hiệu hóa kiểm tra bảo mật hoàn toàn.

Trong trường hợp của tôi, tôi đã chạy webpack-dev-servertrong một thùng chứa có tên là assetsdocker-compose. Tôi đã thay đổi lệnh bắt đầu thành này:

webpack-dev-server --mode development --host 0.0.0.0 --public assets

Và các container khác bây giờ đã có thể thực hiện yêu cầu thông qua http://assets:5000.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.