javascript - 为什么 Node 在使用主机名时期望 WebSocket,但在使用 IP 时正常响应?
问题描述
作为一点上下文:我一直在玩 Windows 终端,并设置配置文件、键绑定,并且在我的节点配置文件的情况下,设置启动时需要的脚本。这个获取require
d 的 js 脚本为我提供了一大堆实用程序,以使我在 REPL 中更快(将属性定义globalThis
为 getter,例如clear
和pwd
)。其中之一是inspect
在我的终端中打开一个新窗格,并且应该开始检查原始节点 REPL。完美运行...直到我更改了 Node 将其检查器“服务器”绑定到的位置。
我还有一个我制作的工具,hostman
它会写入我的主机文件,其目标是允许我将我的项目绑定到主机名,而不是127.{1-255}.{1-255}.{1-255}
- 因为这正是主机名的用途(或多或少!)。我已经为我的 Node REPL: 做了这个nodejsterm -> 127.99.110.101
。
我将省略更粗略的细节,但只知道当我在 IP 上绑定和检查时,一切都按预期工作,但是当我在主机名上绑定和检查时,检查器永远不会连接。我深入研究了 node-inspect 的代码以查看发生了什么,并发现L254-L258 GET
s ${host}/json
。自然地,我把它扔进了 Edge 看看会出现什么。
$ curl http://127.99.110.101:26633/json
[ {
"description": "node.js instance",
"devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353",
"devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353",
"faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico",
"id": "90b76604-50d8-45e5-bda4-3671750a9353",
"title": "NodeJS[2424]",
"type": "node",
"url": "file://",
"webSocketDebuggerUrl": "ws://127.99.110.101:26633/90b76604-50d8-45e5-bda4-3671750a9353"
} ]
$ curl http://nodejsterm:26633/json
WebSockets request was expected
我知道一个简单的问题有很多文章,但是发生了什么,为什么会发生?
解决方案
推荐阅读
- xml - xpath 表达式的结果是对象,应该是元素
- c# - RtlCrc32 和 RtlCrc64 函数的 P/Invoke 定义?
- python - Python 循环通过 input().split()
- python - Python 子进程与二进制文件交互
- css - 如何覆盖 Ng-Bootstrap 样式中的样式并将 html 结构编辑为 Typeahead
- ios - 当我缩小它并滚动时,表格视图无法正确呈现
- python - If else 语句打印“你是对的”,即使不满足最小长度
- entity-framework - 可以在 asp mvc 5 项目中集成身份核心吗?
- python - Python:将 map() 与包含 2 个参数的函数一起使用
- python - 在 Keras 中使用 colocate_with