解决 Webpack "Invalid Host Header",@angular/cli 1.00以上版本也有此问题

突如起来的问题

之前使用的是 @angular/cli 1.00,后发现新版本的@angular/cli升级后,支持使用预 (AoT) 编译器,只需要加 --aot就好,然而运行ng serve --aot时发现,本地能正常打开,而把服务映射出去的无法打开,显示Invalid Host Header

查找发现

webpack-dev-server 最近前更新了 2.4.3 和 1.16.4 两个版,除了常规的 BugFixes 和 Features,还特别注明了一项 Security Fix,并指出这很可能是一个 Breaking Change,但因为并没有涉及到架构、主要功能等影响重大的地方,因此犯不上增加 Major Version,只是作为安全性补丁,更新了 Patch Version。

这轮更新主要是新增了对 host header 的正确性检测(就是我当前遇到的问题),以屏蔽未经授权的访问。开发者需要在执行 webpack-dev-server 命令时手动添加 --public 选项,取值为授权的 host,否则响应中就会提示这个问题,也就是我们看到的“Invalid Host Header”。

解决方案

官方提供了两个解决方案:

  • 执行 webpack-dev-server 命令时手动添加--public 选项,取值为授权的 host,这是官方建议的做法,目的是为了安全。
  • 设置 webpack-dev-server 的配置项 disableHostCheck 为 true 以禁用这一检测,如果开发者使用了代理,或在开发环境中不 care 这些安全问题,该设置可以直接斩草除根。

例外

当然,或许你并没有遇到这样的问题,因为官方贴心的设置了一些例外场景,这些场景下不受该补丁的影响:

  • host 为 localhost 或 127.0.0.1 时不会受阻。
  • 只有使用 webpack-dev-server 或 webpack-dev-middleware 时会进行该项检测,webpack 和 打包后的代码不受此影响。

对于新版@angular/cli

此次受影响的还包括其它基于 webpack-dev-server 的模块,例如 @angular/cli,其 ng serve 命令就是基于 webpack-dev-server 实现的,在升级到 1.0.1 之后收到了牵连。目前官方已经解决了这一问题,1.0.0-beta.1 版本添加了--disable-host-check选项,更新后即可使用。如果你出于某些原因不方便更新,也可以反过来降级到 1.0.0 作为临时解决方案。


相关 Issue 如下

如果觉得文章对你有点用的话,麻烦拿出手机,这里有一个你我都有的小福利(每天一次): 打开支付宝首页搜索“8601304”,即可领红包。谢谢支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 中文翻译 ng help ng build 构建您的应用程序并将其放入输出路径(dist /默认情况下)。 别名:...
    4ea0af17fd67阅读 2,054评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • Angular CLI 是什么? Angular CLI 是一个命令行接口(Command Line Interf...
    semlinker阅读 4,217评论 0 39
  • 2016年9月,今晚突然想写点文字来记录一下我过去的这几年的懵懵懂懂与浑浑噩噩
    小一只阅读 73评论 0 0
  • 在古时候,这绝对是一个大逆不道的问题,好在现在开明了,什么都主张自由为主。择业自由,择偶自由,更主要的是言论自由,...
    汲思广溢阅读 588评论 0 0