解决内网穿透 Ionic5/Angular8 返回 invalid host header

解决内网穿透 Ionic5/Angular8 返回 invalid host header

问题背景

在开发钉钉H5应用时,为了调试钉钉接口API,常规做法就是使用阿里提供的内网穿透工具,工具详情请参阅https://ding-doc.dingtalk.com/doc#/kn6zg7/hb7000。根据工具介绍,我们首先运行这个工具(我的电脑是windows10_x64环境),以管理员方式运行cmd,在cmd窗口中先定位到ding.exe所在的目录,然后运行启动命令,如下:
格式:ding.exe -config=./ding.cfg --subdomain=域名前缀 端口

ding.exe -config=./ding.cfg --subdomain=wongoing 8100

我测试的项目是ionic5/Angular8的前端工程,通过ionic serve运行

ionic serve

日志如下:

PS E:\ionicworkspace\ding1> ionic serve
> ng.cmd run app:serve --host=localhost --port=8100
[ng] i 「wds」: Project is running at http://localhost:8100/webpack-dev-server/
[ng] i 「wds」: webpack output is served from /
[ng] i 「wds」: 404s will fallback to //index.html
[ng] chunk {common} common.js, common.js.map (common) 30.2 kB  [rendered]
[ng] chunk {core-js-js} core-js-js.js, core-js-js.js.map (core-js-js) 78.7 kB  [rendered]
[ng] chunk {dom-js} dom-js.js, dom-js.js.map (dom-js) 20.2 kB  [rendered]
[ng] chunk {focus-visible-70713a0c-js} focus-visible-70713a0c-js.js, focus-visible-70713a0c-js.js.map (focus-visible-70713a0c-js) 2.15 kB  [rendered]
[ng] chunk {input-shims-a4fc53ac-js} input-shims-a4fc53ac-js.js, input-shims-a4fc53ac-js.js.map (input-shims-a4fc53ac-js) 13.5 kB  [rendered]
[ng] chunk {ios-transition-b4752795-js} ios-transition-b4752795-js.js, ios-transition-b4752795-js.js.map (ios-transition-b4752795-js) 28.4 kB  [rendered]
[ng] chunk {main} main.js, main.js.map (main) 37.3 kB [initial] [rendered]
[ng] chunk {md-transition-5ee3c425-js} md-transition-5ee3c425-js.js, md-transition-5ee3c425-js.js.map (md-transition-5ee3c425-js) 3.91 kB  [rendered]
[ng] chunk {polyfills} polyfills.js, polyfills.js.map (polyfills) 297 kB [initial] [rendered]
[ng] chunk {runtime} runtime.js, runtime.js.map (runtime) 9.76 kB [entry] [rendered]
[ng] chunk {shadow-css-d7d058ec-d59cb009-js} shadow-css-d7d058ec-d59cb009-js.js, shadow-css-d7d058ec-d59cb009-js.js.map (shadow-css-d7d058ec-d59cb009-js) 15.9 kB  [rendered]
[ng] chunk {status-tap-2ec46489-js} status-tap-2ec46489-js.js, status-tap-2ec46489-js.js.map (status-tap-2ec46489-js) 1.79 kB  [rendered]
[ng] chunk {stencil-polyfills-css-shim} stencil-polyfills-css-shim.js, stencil-polyfills-css-shim.js.map (stencil-polyfills-css-shim) 22 kB  [rendered]
[ng] chunk {stencil-polyfills-dom} stencil-polyfills-dom.js, stencil-polyfills-dom.js.map (stencil-polyfills-dom) 19.8 kB  [rendered]
[ng] chunk {styles} styles.js, styles.js.map (styles) 115 kB [initial] [rendered]
[ng] chunk {swipe-back-d2cdbf9a-js} swipe-back-d2cdbf9a-js.js, swipe-back-d2cdbf9a-js.js.map (swipe-back-d2cdbf9a-js) 2.88 kB  [rendered]
[ng] chunk {swiper-bundle-ccdaac54-js} swiper-bundle-ccdaac54-js.js, swiper-bundle-ccdaac54-js.js.map (swiper-bundle-ccdaac54-js) 176 kB  [rendered]
[ng] chunk {tab1-tab1-module} tab1-tab1-module.js, tab1-tab1-module.js.map (tab1-tab1-module) 244 kB  [rendered]
[ng] chunk {tab2-tab2-module} tab2-tab2-module.js, tab2-tab2-module.js.map (tab2-tab2-module) 6.03 kB  [rendered]
[ng] chunk {tab3-tab3-module} tab3-tab3-module.js, tab3-tab3-module.js.map (tab3-tab3-module) 6.03 kB  [rendered]
[ng] chunk {tabs-tabs-module} tabs-tabs-module.js, tabs-tabs-module.js.map (tabs-tabs-module) 8.58 kB  [rendered]
[ng] chunk {tap-click-606f325e-js} tap-click-606f325e-js.js, tap-click-606f325e-js.js.map (tap-click-606f325e-js) 6.38 kB  [rendered]
[ng] chunk {vendor} vendor.js, vendor.js.map (vendor) 4.77 MB [initial] [rendered]
[ng] Date: 2020-04-08T07:28:00.320Z - Hash: 3016874741ee16877adc - Time: 10900ms

[INFO] Development server running!

       Local: http://localhost:8100

       Use Ctrl+C to quit this process

[INFO] Browser window opened to http://localhost:8100!

[INFO] ... and 77 additional chunks
[ng] i 「wdm」: Compiled successfully.

运行后,会自动打开浏览器,地址为:http://localhost:8100
在这里插入图片描述
然后在浏览器中新开一个选项卡,输入地址:http://wongoing.vaiwan.com/,出现Invalid Host Header错误,结果如下图:
在这里插入图片描述
内网穿透工具控制台日志如下图:
在这里插入图片描述

问题分析

通过查阅网上的资料,基本确定了出现此问题的原因是webpack-dev-server出于安全考虑,默认检查hostname,如果hostname不是配置内的就不能访问。通过查看ionic serve的运行日志就可以看出这个命令的本质就是启动webpack-dev-server。解决这个问题的思路基本就是让webpack-dev-server取消对hostname的检查。

问题解决

由于ionic serve不识别参数–disableHostCheck,所以启动的时候可以改为Angular CLI进行启动,具体命令如下:

ng serve --open --port=8100 --disableHostCheck

运行日志如下:

PS E:\ionicworkspace\ding1> ng serve --open --port=8100 --disableHostCheck
WARNING: Running a server with --disable-host-check is a security risk. See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a for more information.
10% building 3/3 modules 0 activei 「wds」: Project is running at http://localhost:8100/webpack-dev-server/
i 「wds」: webpack output is served from /
i 「wds」: 404s will fallback to //index.html

chunk {0} 0.js, 0.js.map () 22.6 kB  [rendered]
chunk {1} 1.js, 1.js.map () 19.2 kB  [rendered]
chunk {2} 2.js, 2.js.map () 32.3 kB  [rendered]
chunk {3} 3.js, 3.js.map () 32.3 kB  [rendered]
chunk {4} 4.js, 4.js.map () 56.1 kB  [rendered]
chunk {5} 5.js, 5.js.map () 54.4 kB  [rendered]
chunk {6} 6.js, 6.js.map () 4.59 kB  [rendered]
chunk {7} 7.js, 7.js.map () 4.64 kB  [rendered]
chunk {8} 8.js, 8.js.map () 9.67 kB  [rendered]
chunk {9} 9.js, 9.js.map () 10.2 kB  [rendered]
chunk {10} 10.js, 10.js.map () 3.71 kB  [rendered]
chunk {11} 11.js, 11.js.map () 3.7 kB  [rendered]
chunk {12} 12.js, 12.js.map () 24.8 kB  [rendered]
chunk {13} 13.js, 13.js.map () 24.6 kB  [rendered]
chunk {14} 14.js, 14.js.map () 11.6 kB  [rendered]
chunk {15} 15.js, 15.js.map () 11.1 kB  [rendered]
chunk {16} 16.js, 16.js.map () 8.43 kB  [rendered]
chunk {17} 17.js, 17.js.map () 8.56 kB  [rendered]
chunk {18} 18.js, 18.js.map () 5.62 kB  [rendered]
chunk {19} 19.js, 19.js.map () 5.62 kB  [rendered]
chunk {20} 20.js, 20.js.map () 16 kB  [rendered]
chunk {21} 21.js, 21.js.map () 68.8 kB  [rendered]
chunk {22} 22.js, 22.js.map () 68.4 kB  [rendered]
chunk {23} 23.js, 23.js.map () 19.6 kB  [rendered]
chunk {24} 24.js, 24.js.map () 18.6 kB  [rendered]
chunk {25} 25.js, 25.js.map () 3.42 kB  [rendered]
chunk {26} 26.js, 26.js.map () 12.6 kB  [rendered]
chunk {27} 27.js, 27.js.map () 12.6 kB  [rendered]
chunk {28} 28.js, 28.js.map () 14.6 kB  [rendered]
chunk {29} 29.js, 29.js.map () 14.5 kB  [rendered]
chunk {30} 30.js, 30.js.map () 25.7 kB  [rendered]
chunk {31} 31.js, 31.js.map () 25.6 kB  [rendered]
chunk {32} 32.js, 32.js.map () 40.8 kB  [rendered]
chunk {33} 33.js, 33.js.map () 44.4 kB  [rendered]
chunk {34} 34.js, 34.js.map () 13.7 kB  [rendered]
chunk {35} 35.js, 35.js.map () 13.4 kB  [rendered]
chunk {36} 36.js, 36.js.map () 28.9 kB  [rendered]
chunk {37} 37.js, 37.js.map () 29 kB  [rendered]
chunk {38} 38.js, 38.js.map () 22.6 kB  [rendered]
chunk {39} 39.js, 39.js.map () 21.8 kB  [rendered]
chunk {40} 40.js, 40.js.map () 34.5 kB  [rendered]
chunk {41} 41.js, 41.js.map () 21 kB  [rendered]
chunk {42} 42.js, 42.js.map () 20.4 kB  [rendered]
chunk {43} 43.js, 43.js.map () 12.6 kB  [rendered]
chunk {44} 44.js, 44.js.map () 12.6 kB  [rendered]
chunk {45} 45.js, 45.js.map () 9.63 kB  [rendered]
chunk {46} 46.js, 46.js.map () 9.91 kB  [rendered]
chunk {47} 47.js, 47.js.map () 20.5 kB  [rendered]
chunk {48} 48.js, 48.js.map () 21.9 kB  [rendered]
chunk {49} 49.js, 49.js.map () 46.8 kB  [rendered]
chunk {50} 50.js, 50.js.map () 47.2 kB  [rendered]
chunk {51} 51.js, 51.js.map () 12.7 kB  [rendered]
chunk {52} 52.js, 52.js.map () 12.7 kB  [rendered]
chunk {53} 53.js, 53.js.map () 6.48 kB  [rendered]
chunk {54} 54.js, 54.js.map () 24.4 kB  [rendered]
chunk {55} 55.js, 55.js.map () 25 kB  [rendered]
chunk {56} 56.js, 56.js.map () 22.5 kB  [rendered]
chunk {57} 57.js, 57.js.map () 27.1 kB  [rendered]
chunk {58} 58.js, 58.js.map () 26.3 kB  [rendered]
chunk {59} 59.js, 59.js.map () 22.2 kB  [rendered]
chunk {60} 60.js, 60.js.map () 22.2 kB  [rendered]
chunk {61} 61.js, 61.js.map () 36.6 kB  [rendered]
chunk {62} 62.js, 62.js.map () 36.6 kB  [rendered]
chunk {63} 63.js, 63.js.map () 8.05 kB  [rendered]
chunk {64} 64.js, 64.js.map () 6.98 kB  [rendered]
chunk {65} 65.js, 65.js.map () 6.98 kB  [rendered]
chunk {66} 66.js, 66.js.map () 14.9 kB  [rendered]
chunk {67} 67.js, 67.js.map () 15.1 kB  [rendered]
chunk {68} 68.js, 68.js.map () 8.68 kB  [rendered]
chunk {69} 69.js, 69.js.map () 1.84 kB  [rendered]
chunk {70} 70.js, 70.js.map () 12.7 kB  [rendered]
chunk {71} 71.js, 71.js.map () 12.7 kB  [rendered]
chunk {72} 72.js, 72.js.map () 18.4 kB  [rendered]
chunk {73} 73.js, 73.js.map () 19 kB  [rendered]
chunk {74} 74.js, 74.js.map () 11.1 kB  [rendered]
chunk {75} 75.js, 75.js.map () 10.9 kB  [rendered]
chunk {76} 76.js, 76.js.map () 20.2 kB  [rendered]
chunk {common} common.js, common.js.map (common) 30.2 kB  [rendered]
chunk {core-js-js} core-js-js.js, core-js-js.js.map (core-js-js) 78.7 kB  [rendered]
chunk {dom-js} dom-js.js, dom-js.js.map (dom-js) 20.2 kB  [rendered]
chunk {focus-visible-70713a0c-js} focus-visible-70713a0c-js.js, focus-visible-70713a0c-js.js.map (focus-visible-70713a0c-js) 2.15 kB  [rendered]
chunk {input-shims-a4fc53ac-js} input-shims-a4fc53ac-js.js, input-shims-a4fc53ac-js.js.map (input-shims-a4fc53ac-js) 13.5 kB  [rendered]
chunk {ios-transition-b4752795-js} ios-transition-b4752795-js.js, ios-transition-b4752795-js.js.map (ios-transition-b4752795-js) 28.4 kB  [rendered]
chunk {main} main.js, main.js.map (main) 37.3 kB [initial] [rendered]
chunk {md-transition-5ee3c425-js} md-transition-5ee3c425-js.js, md-transition-5ee3c425-js.js.map (md-transition-5ee3c425-js) 3.91 kB  [rendered]
chunk {polyfills} polyfills.js, polyfills.js.map (polyfills) 297 kB [initial] [rendered]
chunk {runtime} runtime.js, runtime.js.map (runtime) 9.76 kB [entry] [rendered]
chunk {shadow-css-d7d058ec-d59cb009-js} shadow-css-d7d058ec-d59cb009-js.js, shadow-css-d7d058ec-d59cb009-js.js.map (shadow-css-d7d058ec-d59cb009-js) 15.9 kB  [rendered]
chunk {status-tap-2ec46489-js} status-tap-2ec46489-js.js, status-tap-2ec46489-js.js.map (status-tap-2ec46489-js) 1.79 kB  [rendered]
chunk {stencil-polyfills-css-shim} stencil-polyfills-css-shim.js, stencil-polyfills-css-shim.js.map (stencil-polyfills-css-shim) 22 kB  [rendered]
chunk {stencil-polyfills-dom} stencil-polyfills-dom.js, stencil-polyfills-dom.js.map (stencil-polyfills-dom) 19.8 kB  [rendered]
chunk {styles} styles.js, styles.js.map (styles) 115 kB [initial] [rendered]
chunk {swipe-back-d2cdbf9a-js} swipe-back-d2cdbf9a-js.js, swipe-back-d2cdbf9a-js.js.map (swipe-back-d2cdbf9a-js) 2.88 kB  [rendered]
chunk {swiper-bundle-ccdaac54-js} swiper-bundle-ccdaac54-js.js, swiper-bundle-ccdaac54-js.js.map (swiper-bundle-ccdaac54-js) 176 kB  [rendered]
chunk {tab1-tab1-module} tab1-tab1-module.js, tab1-tab1-module.js.map (tab1-tab1-module) 244 kB  [rendered]
chunk {tab2-tab2-module} tab2-tab2-module.js, tab2-tab2-module.js.map (tab2-tab2-module) 6.03 kB  [rendered]
chunk {tab3-tab3-module} tab3-tab3-module.js, tab3-tab3-module.js.map (tab3-tab3-module) 6.03 kB  [rendered]
chunk {tabs-tabs-module} tabs-tabs-module.js, tabs-tabs-module.js.map (tabs-tabs-module) 8.58 kB  [rendered]
chunk {tap-click-606f325e-js} tap-click-606f325e-js.js, tap-click-606f325e-js.js.map (tap-click-606f325e-js) 6.38 kB  [rendered]
chunk {vendor} vendor.js, vendor.js.map (vendor) 4.77 MB [initial] [rendered]
Date: 2020-04-08T07:39:59.545Z - Hash: 3016874741ee16877adc - Time: 12080ms
** Angular Live Development Server is listening on localhost:8100, open your browser on http://localhost:8100/ **
i 「wdm」: Compiled successfully.

这个命令等同于ionic serve,同时还禁用了对hostname的检查,这时再在浏览器中输入http://wongoing.vaiwan.com,发现已经能够正常访问了,如下图:
在这里插入图片描述
说明内网穿透成功,可以幸福的进行后面的开发了~~

发布了138 篇原创文章 · 获赞 303 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/zlbdmm/article/details/105388630