JetBrains 市场如何知道 IDE 版本?

How does the JetBrains marketplace know the IDE version?

如果我在 IntelliJ 市场上打开一个插件页面,例如https://plugins.jetbrains.com/plugin/1236-identifier-highlighter 我看到这样的消息:

Not compatible with the version of your running IDE (IntelliJ IDEA xxxx)

网站如何知道我的系统 运行 是哪个版本的 IntelliJ?我没有登录,在私人模式选项卡/不同选项卡中出现相同的行为。

如果您查看该页面的浏览器开发工具的 网络 选项卡,您会看到在多个端口(例如63342-63344)。我假设这是一个范围,这样如果一个端口正在使用,它可以移动到下一个。

如果你然后 运行 netstat -n -b 你会看到成功回复的端口正在被 idea64.exe 监听,它发送到网页的响应是带有版本信息的小 JSON 数据包。

因此 remotely-loaded Marketplace 网页有效地向 IDEA 的本地副本询问其版本(使用本地 HTTP 调用)并使用该信息填充页面文本!

您甚至可以通过尝试在新的浏览器选项卡中打开 http://localhost:63342/api/installPlugin(根据需要更改端口号)来亲眼看到这一点。对我来说,IDEA 弹出了一个对话框 'Using REST API / installPlugin API is requested. Do you trust unknown host? / Yes / No'(我假设 Marketplace 网页通常会添加一些 headers 来抑制它)。如果我单击是,那么我可以在 Web 浏览器中看到响应 JSON 版本信息。